Соединение двух проектов с расширением .py
Создаю приложение и решил его делать частями, то есть одна часть приложения в одном коде, другая часть приложения в другом.
Первый файл является главным, второй файл - файлом, который нужно вставить в первый.
Проблема в том, что второй файл делался с помощью Qt Designer и имеет отсылки к .ui файлам, не знаю как это правильно соединить.
Вот главный код, в который надо вставить другой код (в 2 страницу):
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from PyQt5.QtCore import Qt
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
#размер основного окн
self.resize(845, 535)
self.setMinimumSize(QtCore.QSize(845, 535))
self.setMaximumSize(QtCore.QSize(845, 535))
self.setStyleSheet("background-color: rgb(45, 45, 45);")
#центральный виджет
self.centralwidget = QtWidgets.QWidget()
self.centralwidget.setObjectName("centralwidget")
self.setCentralWidget(self.centralwidget)
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.verticalLayout_1 = QtWidgets.QVBoxLayout(self.frame_top_menus)
self.verticalLayout_1.setContentsMargins(0,0,0,0)
self.verticalLayout_1.setSpacing(5)
#домик
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("QPushButton {border: 0px solid;}")
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("QPushButton {border: 0px solid;}")
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_3.setStyleSheet("QPushButton {border: 0px solid;}")
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))
self.btn_page_4.setStyleSheet("QPushButton {border: 0px solid;")
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_1.addWidget(self.btn_page_4)
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.setStyleSheet('QStackedWidget{\n'
'border: 0px solid;')
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.setPointSize(0)
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)
self.page_4 = QtWidgets.QWidget()
self.page_4.setObjectName('page_4')
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.frame_top_menus)
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.page_4)
self.verticalLayout_9.addWidget(self.page_4)
self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_9.setSpacing(0)
self.verticalLayout_9.setObjectName('verticalLayout_9')
self.label_3 = QtWidgets.QLabel('Страница4', self.page_4)
font = QtGui.QFont()
font.setPointSize(0)
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label_3.setFont(font)
self.label_3.setStyleSheet('color: black; background-color: white;')
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName('label_3')
self.verticalLayout_9.addWidget(self.label_3)
self.stackedWidget.addWidget(self.page_4)
self.verticalLayout_5.addWidget(self.stackedWidget)
self.horizontalLayout_2.addWidget(self.frame_pages)
self.stackedWidget.setCurrentIndex(0)
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
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.centralwidget = QtWidgets.QLabel(self.page_1)
self.centralwidget.setObjectName("centralwidget")
self.centralwidget.setStyleSheet('selection-color: rgb(45, 86, 100)')
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)
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
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, app):
QWidget.__init__(self)
self.weather = WeatherData()
self.weather.start()
self.app = app
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)
self.app.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)
self.app.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)
self.app.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(app)
app.exec_()
Вот ссылка на диск с .ui файлами Яндекс Диск
Ответы (1 шт):
Позволю дать вам некоторые советы:
хотя ваш вопрос звучит как: 'Соединение двух проектов с расширением .py', я понял что вам надо вставить виджет
Appиз втогого файла как страницу (например четвертую) в основное приложениеmain.py.ваше основное приложение
main.py- содержало много ошибок. Я исправил их, смотрите по тексту кода.НЕТ проблемы в том, что второй файл делался с помощью Qt Designer и имеет отсылки к .ui файлам.
я не могу проверить правильно ли работает ваш второй файл, поэтому я заменил его каким-то своим q1297974_second.py.
предположим, что ваш второй файл рабочий, но некоторые вещи вам надо в нем подправить.
Не надо передавать
app-ex = App(app)замените
.
...
def __init__(self, app):
QWidget.__init__(self)
...
на
...
def __init__(self):
super().__init__()
...
- уберите все строки, в которых есть
self.app - замените все
self.app.processEvents()наQtWidgets.QApplication.processEvents()
- в основном файле:
- делаем импорт
from q1297974_second import App - создаем экземпляр
self.second = App() - добавляем в layout -
self.verticalLayout_9.addWidget(self.second)
- ВСЕ.
q1297974_main.py
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from q1297974_second import App # +++
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
#размер основного окн
self.resize(845, 535)
# self.setMinimumSize(QtCore.QSize(845, 535))
# self.setMaximumSize(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)
# frame_top_menus - verticalLayout_4 от frame_left_menu
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)
# ? verticalLayout_1
'''
self.verticalLayout_1 = QtWidgets.QVBoxLayout(self.frame_top_menus)
self.verticalLayout_1.setContentsMargins(0,0,0,0)
self.verticalLayout_1.setSpacing(5)
'''
#домик
self.btn_page_1 = QtWidgets.QPushButton("", self.frame_top_menus)
self.btn_page_1.setIcon(QIcon('Ok.png'))
self.btn_page_1.setIconSize(QSize(45,45))
self.btn_page_1.setMinimumSize(QtCore.QSize(0, 40))
# ?
# ? self.btn_page_1.setStyleSheet("QPushButton {border: 0px solid;}")
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('im.png'))
self.btn_page_2.setIconSize(QSize(45,45))
self.btn_page_2.setMinimumSize(QtCore.QSize(0, 40))
# self.btn_page_2.setStyleSheet("QPushButton {border: 0px solid;}")
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('ball.png'))
self.btn_page_3.setIconSize(QSize(45,45))
self.btn_page_3.setMinimumSize(QtCore.QSize(0, 40))
# self.btn_page_3.setStyleSheet("QPushButton {border: 0px solid;}")
self.btn_page_4 = QtWidgets.QPushButton('', self.frame_top_menus)
self.btn_page_4.setIcon(QIcon('lena.jpg'))
self.btn_page_4.setIconSize(QSize(45, 45))
self.btn_page_4.setMinimumSize(QtCore.QSize(0, 40))
# self.btn_page_4.setStyleSheet("QPushButton {border: 0px solid;")
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)
# ? verticalLayout_1
# ? self.verticalLayout_1.addWidget(self.btn_page_4)
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.setStyleSheet('QStackedWidget{\n'
# ? 'border: 0px solid;')
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("Страница 1", 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.setPointSize(0)
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.frame_top_menus)
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.page_4)
# ? self.verticalLayout_9.addWidget(self.page_4)
self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_9.setSpacing(0)
self.verticalLayout_9.setObjectName('verticalLayout_9')
# +++ ^
self.second = App()
self.verticalLayout_9.addWidget(self.second)
'''
self.label_3 = QtWidgets.QLabel('Страница4', self.page_4)
font = QtGui.QFont()
# ? font.setPointSize(0)
font.setFamily("Century Gothic")
font.setPointSize(15)
font.setKerning(True)
self.label_3.setFont(font)
self.label_3.setStyleSheet('color: black; background-color: white;')
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName('label_3')
self.verticalLayout_9.addWidget(self.label_3)
'''
# +++ ^
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.centralwidget = QtWidgets.QLabel(self.page_1)
self.centralwidget.setObjectName("centralwidget")
self.centralwidget.setStyleSheet('selection-color: rgb(45, 86, 100)')
'''
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_())
q1297974_second.py
import sys
from PyQt5 import QtCore, QtWidgets, uic
from PyQt5.QtCore import QPropertyAnimation, pyqtProperty
from PyQt5.QtWidgets import QGraphicsDropShadowEffect, QApplication, QMainWindow
class AnimationShadowEffect(QGraphicsDropShadowEffect):
def __init__(self, color, *args, **kwargs):
super(AnimationShadowEffect, self).__init__(*args, **kwargs)
self.setColor(color)
self.setOffset(0, 0)
self.setBlurRadius(0)
self._radius = 0
self.animation = QPropertyAnimation(self)
self.animation.setTargetObject(self)
self.animation.setDuration(2000)
self.animation.setLoopCount(-1)
self.animation.setPropertyName(b'radius')
self.animation.setKeyValueAt(0, 1)
self.animation.setKeyValueAt(0.5, 30)
self.animation.setKeyValueAt(1, 1)
def start(self):
self.animation.start()
def stop(self, r=0):
self.animation.stop()
self.radius = r
@pyqtProperty(int)
def radius(self):
return self._radius
@radius.setter
def radius(self, r):
self._radius = r
self.setBlurRadius(r)
class App(QMainWindow):
def __init__(self):
super(App, self).__init__()
# self.w_root = uic.loadUi('root.ui')
self.w_root = uic.loadUi("Test_333.ui", self) # +++
self.layout = QtWidgets.QGridLayout(self.w_root.centralwidget)
self.layout.addWidget(self.w_root.designer_button, 1, 1, alignment=QtCore.Qt.AlignCenter)
self.w_root.designer_button.setFixedSize(200, 70)
self.w_root.designer_button.setCheckable(True)
self.aniButton = AnimationShadowEffect(QtCore.Qt.white, self.w_root.designer_button)
self.w_root.designer_button.hover.connect(self.button_hover)
self.w_root.designer_button.setGraphicsEffect(self.aniButton)
def button_hover(self, hover):
if hover == "enterEvent":
self.aniButton.start()
elif hover == "leaveEvent":
self.aniButton.stop()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
ex.show()
sys.exit(app.exec_())
Test_333.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>357</width>
<height>205</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(41, 41, 62);</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="PushButton" name="designer_button">
<property name="geometry">
<rect>
<x>80</x>
<y>40</y>
<width>201</width>
<height>71</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QPushButton {
background-color: rgb(28, 28, 42);
border: 1px solid rgb(202, 202, 202);
border-radius: 15px;
color: rgb(202, 202, 202);
font-family: Calibre, Helvetica Neue, Segoe UI, Helvetica, Arial, Lucida Grande sans-serif;
font-size: 16px;
font-weight: 500;
}
QPushButton:hover {
background-color: rgb(16, 16, 24);
color: rgb(76, 76, 76);
}
QPushButton:pressed {
background-color: rgb(6, 6, 8);
color: rgb(41, 41, 62);
}
</string>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>357</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>PushButton</class>
<extends>QPushButton</extends>
<header>my_PushButton</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
