Не получается вставить виджет внутрь другого виджета
У меня есть небольшая программа, в которой есть 4 страницы, и я хочу вставить в 4 страницу виджет с погодой, однако виджет не появляется внутри 4 страницы, а появляется в виде нового окна и я не понимаю почему.
Вот основной код, в который надо вставить виджет:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from main import App # +++
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
#размер основного окн
self.resize(845, 535)
self.setFixedSize(QtCore.QSize(845,535))
#
self.setStyleSheet("background-color: rgb(245, 45, 45);")
#центральный виджет
self.centralwidget = QtWidgets.QWidget()
self.centralwidget.setObjectName("centralwidget")
self.setCentralWidget(self.centralwidget)
# Content horizontalLayout_2
self.Content = QtWidgets.QFrame(self.centralwidget)
self.Content.setStyleSheet("background-color: rgb(255, 255, 255);")
self.Content.setFrameShape(QtWidgets.QFrame.NoFrame)
self.Content.setFrameShadow(QtWidgets.QFrame.Raised)
self.Content.setObjectName("Content")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.Content)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setSpacing(0)
#виджет слева
self.frame_left_menu = QtWidgets.QFrame(self.Content)
self.frame_left_menu.setMinimumSize(QtCore.QSize(45, 0))
self.frame_left_menu.setStyleSheet("background-color: rgb(255, 255, 255); border: 0px solid; ")
self.frame_left_menu.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_left_menu.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_left_menu.setObjectName("frame_left_menu")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.frame_left_menu)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.frame_top_menus = QtWidgets.QFrame(self.frame_left_menu)
self.frame_top_menus.setFrameShape(QtWidgets.QFrame.NoFrame)
self.frame_top_menus.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_top_menus.setObjectName("frame_top_menus")
#указываем вертикальное выравнивание
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.frame_top_menus)
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_4.setSpacing(10)
#домик
self.btn_page_1 = QtWidgets.QPushButton("", self.frame_top_menus)
self.btn_page_1.setIcon(QIcon('дом.png'))
self.btn_page_1.setIconSize(QSize(45,45))
self.btn_page_1.setMinimumSize(QtCore.QSize(0, 40))
self.btn_page_1.setStyleSheet('border: 0px solid red;')
self.btn_page_1.setObjectName("btn_page_1")
self.verticalLayout_4.addWidget(self.btn_page_1)
#Заметки
self.btn_page_2 = QtWidgets.QPushButton("", self.frame_top_menus)
self.btn_page_2.setIcon(QIcon('заметка1.png'))
self.btn_page_2.setIconSize(QSize(45,45))
self.btn_page_2.setMinimumSize(QtCore.QSize(0, 40))
self.btn_page_2.setStyleSheet('border: 0px solid red;')
self.btn_page_2.setObjectName("btn_page_2")
self.verticalLayout_4.addWidget(self.btn_page_2)
#погода
self.btn_page_3 = QtWidgets.QPushButton("", self.frame_top_menus)
self.btn_page_3.setIcon(QIcon('солнышко.png'))
self.btn_page_3.setIconSize(QSize(45,45))
self.btn_page_3.setMinimumSize(QtCore.QSize(0, 40))
self.btn_page_4 = QtWidgets.QPushButton('', self.frame_top_menus)
self.btn_page_4.setIcon(QIcon('папочка.png'))
self.btn_page_4.setIconSize(QSize(45, 45))
self.btn_page_4.setMinimumSize(QtCore.QSize(0, 40))
timer = QTimer(self)
timer.timeout.connect(self.showTime)
timer.start(1000)
font1 = QFont('Century Gothic', 13, QFont.Bold)
self.timewidget = QtWidgets.QLabel()
self.timewidget.setMinimumSize(QtCore.QSize(45,45))
self.timewidget.setAlignment(Qt.AlignBottom)
self.timewidget.setFont(font1)
self.btn_page_3.setObjectName("btn_page_3")
self.verticalLayout_4.addWidget(self.btn_page_3)
self.verticalLayout_3.addWidget(self.frame_top_menus, 0, QtCore.Qt.AlignTop)
self.horizontalLayout_2.addWidget(self.frame_left_menu)
self.verticalLayout_4.addWidget(self.btn_page_4)
self.frame_pages = QtWidgets.QFrame(self.Content)
self.frame_pages.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_pages.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_pages.setObjectName("frame_pages")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_pages)
self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.stackedWidget = QtWidgets.QStackedWidget(self.frame_pages)
self.stackedWidget.setMinimumSize(QtCore.QSize(800, 535))
self.stackedWidget.setObjectName("stackedWidget")
#1 страница
self.page_1 = QtWidgets.QWidget()
self.page_1.setObjectName("page_1")
self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.page_1)
self.verticalLayout_7.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_7.setObjectName("verticalLayout_7")
#указываем что будет находится на 1 странице
self.label_1 = QtWidgets.QLabel(self.page_1)
font = QtGui.QFont()
font.setPointSize(40)
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label_1.setFont(font)
self.label_1.setAlignment(QtCore.Qt.AlignCenter)
self.label_1.setObjectName("label_1")
self.verticalLayout_7.addWidget(self.label_1)
self.stackedWidget.addWidget(self.page_1)
#2 страница
self.page_2 = QtWidgets.QWidget()
self.page_2.setObjectName("page_2")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.page_2)
self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_6.setObjectName("verticalLayout_6")
#указываем что будет находиться в 2 странице
self.label_2 = QtWidgets.QLabel("Страница2", self.page_2)
font = QtGui.QFont()
font.setPointSize(40)
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label_2.setFont(font)
self.label_2.setStyleSheet("color: #FFF; background-color: #1eae98;")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.verticalLayout_6.addWidget(self.label_2)
self.stackedWidget.addWidget(self.page_2)
#3 страница
self.page_3 = QtWidgets.QWidget()
self.page_3.setObjectName("page_3")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.page_3)
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_8.setObjectName("verticalLayout_8")
#указываем что будет находиться на 3 странице
self.label = QtWidgets.QLabel("Страница3", self.page_3)
font = QtGui.QFont()
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label.setFont(font)
self.label.setStyleSheet("color: green; background-color: black;")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout_8.addWidget(self.label)
self.stackedWidget.addWidget(self.page_3)
# page_4 verticalLayout_9
self.page_4 = QtWidgets.QWidget()
self.page_4.setObjectName('page_4')
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.page_4)
self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_9.setSpacing(0)
self.verticalLayout_9.setObjectName('verticalLayout_9')
self.main = App()
self.verticalLayout_9.addWidget(self.main)
self.stackedWidget.addWidget(self.page_4)
self.verticalLayout_5.addWidget(self.stackedWidget)
self.horizontalLayout_2.addWidget(self.frame_pages)
self.stackedWidget.setCurrentIndex(0)
# verticalLayout centralwidget
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
# verticalLayout.addWidget(self.Content)
self.verticalLayout.addWidget(self.Content)
#Нажатие на дом
self.btn_page_1.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_1))
#Нажатие на заметки
self.btn_page_2.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_2))
#Нажатие на погоду
self.btn_page_3.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_3))
self.btn_page_4.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_4))
self.frame_left_menu.installEventFilter(self)
self.verticalLayout_3.addWidget(self.timewidget, 0, QtCore.Qt.AlignBottom)
# календарь
self.calendarWidget = QtWidgets.QCalendarWidget(self.page_1)
self.calendarWidget.setEnabled(True)
self.calendarWidget.setGeometry(QtCore.QRect(0, 154, 800, 381))
self.calendarWidget.setFixedSize(QtCore.QSize(800, 381))
font = QtGui.QFont()
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(False)
self.calendarWidget.setFont(font)
self.calendarWidget.setAutoFillBackground(True)
self.calendarWidget.setGridVisible(False)
self.calendarWidget.setVerticalHeaderFormat(QtWidgets.QCalendarWidget.NoVerticalHeader)
self.calendarWidget.setDateEditEnabled(False)
self.calendarWidget.setDateEditAcceptDelay(0)
self.calendarWidget.setObjectName("calendarWidget")
self.calendarWidget.setStyleSheet(StyleSheet)
self.verticalLayout_7.addWidget(self.calendarWidget)
def showTime(self):
current_time = QtCore.QTime.currentTime()
label_time = current_time.toString('hh:mm')
self.timewidget.setText(label_time)
StyleSheet = '''
/* Верхняя область навигации */
#qt_calendar_navigationbar {
background-color: rgb(0, 188, 212);
min-width: 800px;
max-width: 800px;
min-height: 35px;
max-height: 35px;
}
/* Кнопка последнего месяца и кнопка следующего месяца */
#qt_calendar_prevmonth, #qt_calendar_nextmonth {
border: none; /* убрать границу */
margin-top: 0px;
color: white;
min-width: 30px;
max-width: 30px;
min-height: 30px;
max-height: 30px;
border-radius: 10px; /* выглядит как эллипс */
font-weight: bold; /* шрифт полужирный */
qproperty-icon: none;
background-color: transparent; /* Цвет фона прозрачный */
}
#qt_calendar_prevmonth {
qproperty-text: "<"; /* Изменить текст кнопки */
}
#qt_calendar_nextmonth {
qproperty-text: ">";
}
#qt_calendar_prevmonth:hover, #qt_calendar_nextmonth:hover {
background-color: rgba(225, 225, 225, 100);
}
#qt_calendar_prevmonth:pressed, #qt_calendar_nextmonth:pressed {
background-color: rgba(235, 235, 235, 100);
}
/* год, месяц */
#qt_calendar_yearbutton, #qt_calendar_monthbutton {
color: white;
margin: -1px;
min-width: -1px;
border-radius: 15px;
background-color: rgba(0, 188, 212, 100)
}
#qt_calendar_yearbutton:hover, #qt_calendar_monthbutton:hover {
background-color: rgba(225, 225, 225, 100);
}
#qt_calendar_yearbutton:pressed, #qt_calendar_monthbutton:pressed {
background-color: rgba(235, 235, 235, 100);
}
/* Поле ввода года */
#qt_calendar_yearedit {
min-width: 85px;
color: white;
background: transparent; /* Сделать фон окна ввода прозрачным */
}
#qt_calendar_yearedit::up-button { /* Кнопка вверх */
width: 25px;
subcontrol-position: right;
}
#qt_calendar_yearedit::down-button { /* Кнопка вниз */
width: 25px;
subcontrol-position: left;
}
/* меню выбора месяца */
CalendarWidget_QToolButton_QMenu {
background-color: white;
}
CalendarWidget_QToolButton_QMenu_item {
padding: 10px;
}
CalendarWidget_QToolButton_QMenu_item_selected_enabled {
background-color: rgb(230, 230, 230);
selection-color: rgb(45, 86, 100);
selection-background-color: rgb(205, 217, 226);
}
CalendarWidget_QToolButton_menu-indicator {
subcontrol-position: right center;
}
/* ниже календарной формы */
#qt_calendar_calendarview {
outline: 0px; /* Удалить выделенную пунктирную рамку */
selection-background-color: rgb(0, 188, 212);
}
'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Century Gothic", 12,))
w = MainWindow()
w.show()
sys.exit(app.exec_())
Вот код виджета, который надо вставить:
Чтобы виджет работал нужны еще несколько файлов, которые я загрузил в яндекс диск
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uic, QtCore, QtTest, QtWidgets
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import QThread
import weather
import time
import datetime
from weather import DAYS
#два класса с числами Фобаначе , для правного визуала
H_show = [
155,156,157,158,
160,168,181,202,
236,291,380,400,
440,500,535,
]
H_hide = [
155,156,157,158,
160,168,181,202,
236,291,380,400,
440,500,535,
]
class WeatherData(QThread):
req = weather.today()
temp = req['temp']
feels = req['feels']
pres = req['pressure']
speed = str(req['wind']['speed'])
city = req['city']
type = req['dis']
week = weather.week()
def __init__(self):
QThread.__init__(self)
def run(self):
while True:
try:
req = weather.today()
except:
req['temp'] = self.temp
req['feels'] = self.feels
req['pressure'] = self.pres
req['wind']['speed'] = self.pres
req['city'] = self.city
req['dis'] = self.type
try:
req_week = weather.week()
self.week = req_week
except:
self.week = DAYS
self.temp = req['temp']
self.feels = req['feels']
self.pres = req['pressure']
self.speed = str(req['wind']['speed'])
self.city = req['city']
self.type = req['dis']
time.sleep(600)
class App(QWidget):
#
#
#
#
#
#
#
show_more = True
def __init__(self):
super().__init__()
self.weather = WeatherData()
self.weather.start()
self.set()
self.setData()
self.setMore()
def set(self):
self.w_root = uic.loadUi('root.ui')
self.w_root.installEventFilter(self)
self.w_root.btn_more.clicked.connect(self.setHeight)
self.w_root.show()
#
#
#
#
#
#
#
# перемещение кнопки с ресайзом
def eventFilter(self, object, event):
self.w_root.resize(444, self.w_root.height())
self.w_root.btn_more.move(0, self.w_root.height()-26)
self.w_root.l_day.move(8, self.w_root.height()-18)
QtWidgets.QApplication.processEvents()
return False
#
#
#
#
#
#
#
#
#устанавливаем значение на сегодня
def setData(self):
# данные погоды
self.w_root.l_temp.setText(str(self.weather.temp) + '°C')
self.w_root.l_fell.setText(self.weather.feels)
self.w_root.l_pres.setText(self.weather.pres)
self.w_root.l_wind.setText(self.weather.speed + 'м/с')
self.w_root.l_city.setText(self.weather.city)
self.w_root.l_type.setText(self.weather.type)
#иконка погоды
px_logo = QPixmap(f'C:/python/pogoda/{self.weather.type}.png')
self.w_root.l_logo.setPixmap(px_logo)
#день недели
today = DAYS[datetime.datetime.today().weekday()]
self.w_root.l_day.setText(today['title'])
color = today['color']
self.w_root.l_day.setStyleSheet(f'color:{color}')
#
#
def setHeight(self):
if self.w_root.height() >= 200:
self.show_more = False
if self.show_more:
for i in H_hide:
if self.w_root.height() > i:
continue
self.w_root.resize(444, i)
self.w_root.btn_more.move(0, i-26)
self.w_root.l_day.move(8,i-18)
QtWidgets.QApplication.processEvents()
time.sleep(.02)
self.show_more = False
else:
for i in reversed(H_show):
self.w_root.resize(444, i)
self.w_root.btn_more.move(0, i-26)
self.w_root.l_day.move(8,i-18)
QtWidgets.QApplication.processEvents()
time.sleep(.02)
self.show_more = True
App.show_more = self.show_more
#
#
#
#
#
#
#
def setMore(self):
for i in self.weather.week:
w_day = uic.loadUi('day.ui')
w_day.setObjectName('w_day_' + str(i['num']))
w_day.l_title.setText(i['title'])
w_day.l_temp.setText(str(round(i['temp'])) + '°C')
w_day.l_type.setText(i['type'])
w_day.l_title.setStyleSheet('color: ' + i['color'] + '; background-color: none; border: none')
if i['active']:
w_day.setStyleSheet('border: 1px solid' + i['color'])
else:
w_day.setStyleSheet('border: none')
self.w_root.box.addWidget(w_day)
self.w_root.box.addStretch()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
ex.show
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не могу проверить код виджета, который вам надо вставить, но я вставляю что-то свое и все работает. Проверьте еще раз:
main.py
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
#from main import App # ---
from pyowm_OWM import ExampleApp # <---+++
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
#размер основного окн
self.resize(845, 535)
self.setFixedSize(QtCore.QSize(845,535))
self.setStyleSheet("background-color: rgb(245, 45, 45);")
#центральный виджет
self.centralwidget = QtWidgets.QWidget()
self.centralwidget.setObjectName("centralwidget")
self.setCentralWidget(self.centralwidget)
# Content horizontalLayout_2
self.Content = QtWidgets.QFrame(self.centralwidget)
self.Content.setStyleSheet("background-color: rgb(255, 255, 255);")
self.Content.setFrameShape(QtWidgets.QFrame.NoFrame)
self.Content.setFrameShadow(QtWidgets.QFrame.Raised)
self.Content.setObjectName("Content")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.Content)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setSpacing(0)
#виджет слева
self.frame_left_menu = QtWidgets.QFrame(self.Content)
self.frame_left_menu.setMinimumSize(QtCore.QSize(45, 0))
self.frame_left_menu.setStyleSheet("background-color: rgb(255, 255, 255); border: 0px solid; ")
self.frame_left_menu.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_left_menu.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_left_menu.setObjectName("frame_left_menu")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.frame_left_menu)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.frame_top_menus = QtWidgets.QFrame(self.frame_left_menu)
self.frame_top_menus.setFrameShape(QtWidgets.QFrame.NoFrame)
self.frame_top_menus.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_top_menus.setObjectName("frame_top_menus")
#указываем вертикальное выравнивание
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.frame_top_menus)
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_4.setSpacing(10)
#домик
self.btn_page_1 = QtWidgets.QPushButton("", self.frame_top_menus)
self.btn_page_1.setIcon(QIcon('im.png'))
self.btn_page_1.setIconSize(QSize(45,45))
self.btn_page_1.setMinimumSize(QtCore.QSize(0, 40))
self.btn_page_1.setStyleSheet('border: 0px solid red;')
self.btn_page_1.setObjectName("btn_page_1")
self.verticalLayout_4.addWidget(self.btn_page_1)
#Заметки
self.btn_page_2 = QtWidgets.QPushButton("", self.frame_top_menus)
self.btn_page_2.setIcon(QIcon('ball.png'))
self.btn_page_2.setIconSize(QSize(45,45))
self.btn_page_2.setMinimumSize(QtCore.QSize(0, 40))
self.btn_page_2.setStyleSheet('border: 0px solid red;')
self.btn_page_2.setObjectName("btn_page_2")
self.verticalLayout_4.addWidget(self.btn_page_2)
#погода
self.btn_page_3 = QtWidgets.QPushButton("", self.frame_top_menus)
self.btn_page_3.setIcon(QIcon('lena.jpg'))
self.btn_page_3.setIconSize(QSize(45,45))
self.btn_page_3.setMinimumSize(QtCore.QSize(0, 40))
self.btn_page_4 = QtWidgets.QPushButton('', self.frame_top_menus)
self.btn_page_4.setIcon(QIcon('Ok.png'))
self.btn_page_4.setIconSize(QSize(45, 45))
self.btn_page_4.setMinimumSize(QtCore.QSize(0, 40))
timer = QTimer(self)
timer.timeout.connect(self.showTime)
timer.start(1000)
font1 = QFont('Century Gothic', 13, QFont.Bold)
self.timewidget = QtWidgets.QLabel()
self.timewidget.setMinimumSize(QtCore.QSize(45,45))
self.timewidget.setAlignment(Qt.AlignBottom)
self.timewidget.setFont(font1)
self.btn_page_3.setObjectName("btn_page_3")
self.verticalLayout_4.addWidget(self.btn_page_3)
self.verticalLayout_3.addWidget(self.frame_top_menus, 0, QtCore.Qt.AlignTop)
self.horizontalLayout_2.addWidget(self.frame_left_menu)
self.verticalLayout_4.addWidget(self.btn_page_4)
self.frame_pages = QtWidgets.QFrame(self.Content)
self.frame_pages.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_pages.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_pages.setObjectName("frame_pages")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_pages)
self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.stackedWidget = QtWidgets.QStackedWidget(self.frame_pages)
self.stackedWidget.setMinimumSize(QtCore.QSize(800, 535))
self.stackedWidget.setObjectName("stackedWidget")
#1 страница
self.page_1 = QtWidgets.QWidget()
self.page_1.setObjectName("page_1")
self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.page_1)
self.verticalLayout_7.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_7.setObjectName("verticalLayout_7")
#указываем что будет находится на 1 странице
self.label_1 = QtWidgets.QLabel(self.page_1)
font = QtGui.QFont()
font.setPointSize(40)
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label_1.setFont(font)
self.label_1.setAlignment(QtCore.Qt.AlignCenter)
self.label_1.setObjectName("label_1")
self.verticalLayout_7.addWidget(self.label_1)
self.stackedWidget.addWidget(self.page_1)
#2 страница
self.page_2 = QtWidgets.QWidget()
self.page_2.setObjectName("page_2")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.page_2)
self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_6.setObjectName("verticalLayout_6")
#указываем что будет находиться в 2 странице
self.label_2 = QtWidgets.QLabel("Страница2", self.page_2)
font = QtGui.QFont()
font.setPointSize(40)
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label_2.setFont(font)
self.label_2.setStyleSheet("color: #FFF; background-color: #1eae98;")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.verticalLayout_6.addWidget(self.label_2)
self.stackedWidget.addWidget(self.page_2)
#3 страница
self.page_3 = QtWidgets.QWidget()
self.page_3.setObjectName("page_3")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.page_3)
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_8.setObjectName("verticalLayout_8")
#указываем что будет находиться на 3 странице
self.label = QtWidgets.QLabel("Страница3", self.page_3)
font = QtGui.QFont()
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label.setFont(font)
self.label.setStyleSheet("color: green; background-color: black;")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.verticalLayout_8.addWidget(self.label)
self.stackedWidget.addWidget(self.page_3)
# page_4 verticalLayout_9
self.page_4 = QtWidgets.QWidget()
self.page_4.setObjectName('page_4')
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.page_4)
self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_9.setSpacing(0)
self.verticalLayout_9.setObjectName('verticalLayout_9')
# self.main = App()
self.main = ExampleApp() # <----+++
self.verticalLayout_9.addWidget(self.main)
self.stackedWidget.addWidget(self.page_4)
self.verticalLayout_5.addWidget(self.stackedWidget)
self.horizontalLayout_2.addWidget(self.frame_pages)
self.stackedWidget.setCurrentIndex(0)
# verticalLayout centralwidget
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
# verticalLayout.addWidget(self.Content)
self.verticalLayout.addWidget(self.Content)
#Нажатие на дом
self.btn_page_1.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_1))
#Нажатие на заметки
self.btn_page_2.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_2))
#Нажатие на погоду
self.btn_page_3.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_3))
self.btn_page_4.clicked.connect(
lambda: self.stackedWidget.setCurrentWidget(self.page_4))
self.frame_left_menu.installEventFilter(self)
self.verticalLayout_3.addWidget(self.timewidget, 0, QtCore.Qt.AlignBottom)
# календарь
self.calendarWidget = QtWidgets.QCalendarWidget(self.page_1)
self.calendarWidget.setEnabled(True)
self.calendarWidget.setGeometry(QtCore.QRect(0, 154, 800, 381))
self.calendarWidget.setFixedSize(QtCore.QSize(800, 381))
font = QtGui.QFont()
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(False)
self.calendarWidget.setFont(font)
self.calendarWidget.setAutoFillBackground(True)
self.calendarWidget.setGridVisible(False)
self.calendarWidget.setVerticalHeaderFormat(QtWidgets.QCalendarWidget.NoVerticalHeader)
self.calendarWidget.setDateEditEnabled(False)
self.calendarWidget.setDateEditAcceptDelay(0)
self.calendarWidget.setObjectName("calendarWidget")
self.calendarWidget.setStyleSheet(StyleSheet)
self.verticalLayout_7.addWidget(self.calendarWidget)
def showTime(self):
current_time = QtCore.QTime.currentTime()
label_time = current_time.toString('hh:mm')
self.timewidget.setText(label_time)
StyleSheet = '''
/* Верхняя область навигации */
#qt_calendar_navigationbar {
background-color: rgb(0, 188, 212);
min-width: 800px;
max-width: 800px;
min-height: 35px;
max-height: 35px;
}
/* Кнопка последнего месяца и кнопка следующего месяца */
#qt_calendar_prevmonth, #qt_calendar_nextmonth {
border: none; /* убрать границу */
margin-top: 0px;
color: white;
min-width: 30px;
max-width: 30px;
min-height: 30px;
max-height: 30px;
border-radius: 10px; /* выглядит как эллипс */
font-weight: bold; /* шрифт полужирный */
qproperty-icon: none;
background-color: transparent; /* Цвет фона прозрачный */
}
#qt_calendar_prevmonth {
qproperty-text: "<"; /* Изменить текст кнопки */
}
#qt_calendar_nextmonth {
qproperty-text: ">";
}
#qt_calendar_prevmonth:hover, #qt_calendar_nextmonth:hover {
background-color: rgba(225, 225, 225, 100);
}
#qt_calendar_prevmonth:pressed, #qt_calendar_nextmonth:pressed {
background-color: rgba(235, 235, 235, 100);
}
/* год, месяц */
#qt_calendar_yearbutton, #qt_calendar_monthbutton {
color: white;
margin: -1px;
min-width: -1px;
border-radius: 15px;
background-color: rgba(0, 188, 212, 100)
}
#qt_calendar_yearbutton:hover, #qt_calendar_monthbutton:hover {
background-color: rgba(225, 225, 225, 100);
}
#qt_calendar_yearbutton:pressed, #qt_calendar_monthbutton:pressed {
background-color: rgba(235, 235, 235, 100);
}
/* Поле ввода года */
#qt_calendar_yearedit {
min-width: 85px;
color: white;
background: transparent; /* Сделать фон окна ввода прозрачным */
}
#qt_calendar_yearedit::up-button { /* Кнопка вверх */
width: 25px;
subcontrol-position: right;
}
#qt_calendar_yearedit::down-button { /* Кнопка вниз */
width: 25px;
subcontrol-position: left;
}
/* меню выбора месяца */
CalendarWidget_QToolButton_QMenu {
background-color: white;
}
CalendarWidget_QToolButton_QMenu_item {
padding: 10px;
}
CalendarWidget_QToolButton_QMenu_item_selected_enabled {
background-color: rgb(230, 230, 230);
selection-color: rgb(45, 86, 100);
selection-background-color: rgb(205, 217, 226);
}
CalendarWidget_QToolButton_menu-indicator {
subcontrol-position: right center;
}
/* ниже календарной формы */
#qt_calendar_calendarview {
outline: 0px; /* Удалить выделенную пунктирную рамку */
selection-background-color: rgb(0, 188, 212);
}
'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Century Gothic", 12,))
w = MainWindow()
w.show()
sys.exit(app.exec_())
pyowm_OWM.py
from PyQt5 import QtWidgets
import pyowm # pip install pyowm
class ExampleApp(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.pushButton = QtWidgets.QPushButton('Показать температуру', self)
self.pushButton.clicked.connect(self.get_weather)
self.lineEdit = QtWidgets.QLineEdit("Kiev", self, placeholderText='Введите город')
self.lineEdit.move(100, 100)
self.textBrowser = QtWidgets.QTextBrowser(self)
self.textBrowser.setStyleSheet("""
QTextBrowser {
background: #282928;
border: 3px solid #F77;
border-radius: 10px;
color: #fff;
}
""")
self.layout = QtWidgets.QGridLayout(self.centralwidget)
self.layout.addWidget(self.textBrowser, 0, 0, 1, 2)
self.layout.addWidget(self.lineEdit, 1, 0)
self.layout.addWidget(self.pushButton, 1, 1)
def get_weather(self):
owm = pyowm.OWM('7c6d5748acf9ac9cc2f17c86e1111111') # <--- ваш токен
place = self.lineEdit.text()
observation = owm.weather_at_place(place)
w = observation.get_weather()
temp = w.get_temperature('celsius')["temp"]
self.textBrowser.append(f'Температура в {place}: { temp }')
if __name__ == '__main__':
app = QtWidgets.QApplication([])
w = ExampleApp()
w.resize(400, 300)
w.show()
app.exec_()
Update
Попробуйте в вашем коде заменить строку:
self.verticalLayout_9.addWidget(self.main)
на строку:
self.verticalLayout_9.addWidget(self.main.w_root)
Также добавил пару принтов, покажите что они выводят, если не получится.
...
self.main = App() # <----+++
print(f'self.main --> {self.main}')
print(f'self.main.w_root --> {self.main.w_root}')
# self.verticalLayout_9.addWidget(self.main) # ---
self.verticalLayout_9.addWidget(self.main.w_root) # <----+++ main.w_root
self.stackedWidget.addWidget(self.page_4)
...

