Переключение между интерфейсами
Появилась необходимость "изменять" содержимое моего GUI окна на PtQt5.
from PyQt5 import QtCore, QtGui, QtWidgets
import sys, res, datetime, time
weekend = ["Empty", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"]
month = ["Empty", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]
class mainWindow(object):
def Ui_Form(self, Form):
self.show_current_time()
Form.setObjectName("Form")
Form.resize(960, 616)
Form.setWindowFlags(QtCore.Qt.FramelessWindowHint)
Form.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
self.widget.setObjectName("widget")
self.label = QtWidgets.QLabel(self.widget)
self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
self.label.setText("")
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.widget)
self.label_2.setGeometry(QtCore.QRect(120, 115, 670, 61))
font = QtGui.QFont()
font.setPointSize(48)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setStyleSheet("color: rgb(255, 255, 255);")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.widget)
self.label_3.setGeometry(QtCore.QRect(120, 173, 671, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.label_3.setFont(font)
self.label_3.setStyleSheet("color: rgb(255, 255, 255);")
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.pushButton = QtWidgets.QPushButton(self.widget)
self.pushButton.setGeometry(QtCore.QRect(148, 277, 50, 50))
self.pushButton.setStyleSheet("border-image: url(:/images/protokolico.png);\n"
"border-radius: 10px;")
self.pushButton.setText("")
self.pushButton.setObjectName("pushButton")
self.pushButton.clicked.connect(self.protokol)
self.label_4 = QtWidgets.QLabel(self.widget)
self.label_4.setGeometry(QtCore.QRect(138, 326, 61, 31))
font = QtGui.QFont()
font.setBold(False)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(50)
font.setStrikeOut(False)
font.setKerning(False)
font.setStyleStrategy(QtGui.QFont.PreferDefault)
self.label_4.setFont(font)
self.label_4.setMouseTracking(False)
self.label_4.setTabletTracking(False)
self.label_4.setAcceptDrops(False)
self.label_4.setAutoFillBackground(False)
self.label_4.setStyleSheet("color: rgb(255, 255, 255);")
self.label_4.setScaledContents(False)
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setWordWrap(True)
self.label_4.setObjectName("label_4")
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
self.pushButton_2.setStyleSheet("border-image: url(:/images/zero.png);")
self.pushButton_2.setText("")
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_2.clicked.connect(self.setMainWindow)
self.pushButton_3 = QtWidgets.QPushButton(self.widget)
self.pushButton_3.setGeometry(QtCore.QRect(224, 277, 50, 50))
self.pushButton_3.setStyleSheet("border-image: url(:/images/database.png);")
self.pushButton_3.setText("")
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_3.clicked.connect(self.DataBase)
self.label_5 = QtWidgets.QLabel(self.widget)
self.label_5.setGeometry(QtCore.QRect(219, 326, 61, 31))
font = QtGui.QFont()
font.setBold(False)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(50)
font.setStrikeOut(False)
font.setKerning(False)
font.setStyleStrategy(QtGui.QFont.PreferDefault)
self.label_5.setFont(font)
self.label_5.setMouseTracking(False)
self.label_5.setTabletTracking(False)
self.label_5.setAcceptDrops(False)
self.label_5.setAutoFillBackground(False)
self.label_5.setStyleSheet("color: rgb(255, 255, 255);")
self.label_5.setScaledContents(False)
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.label_5.setWordWrap(True)
self.label_5.setObjectName("label_5")
self.pushButton_4 = QtWidgets.QPushButton(self.widget)
self.pushButton_4.setGeometry(QtCore.QRect(306, 277, 50, 50))
self.pushButton_4.setStyleSheet("border-image: url(:/images/koap.png);\n"
"border-radius: 10px;")
self.pushButton_4.setText("")
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_4.clicked.connect(self.Koap)
self.label_6 = QtWidgets.QLabel(self.widget)
self.label_6.setGeometry(QtCore.QRect(300, 324, 61, 31))
font = QtGui.QFont()
font.setBold(False)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(50)
font.setStrikeOut(False)
font.setKerning(False)
font.setStyleStrategy(QtGui.QFont.PreferDefault)
self.label_6.setFont(font)
self.label_6.setMouseTracking(False)
self.label_6.setTabletTracking(False)
self.label_6.setAcceptDrops(False)
self.label_6.setAutoFillBackground(False)
self.label_6.setStyleSheet("color: rgb(255, 255, 255);")
self.label_6.setScaledContents(False)
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
self.label_6.setWordWrap(True)
self.label_6.setObjectName("label_6")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_2.setText(_translate("Form", ""))
self.label_3.setText(_translate("Form", ""))
self.label_4.setText(_translate("Form", "Составить протокол"))
self.label_5.setText(_translate("Form", "База данных"))
self.label_6.setText(_translate("Form", "КоАП"))
def protokol(self):
print("Составить протокол")
def setMainWindow(self):
print("MainWindow")
def DataBase(self):
print("База данных")
def Koap(self):
print("КоАП РФ")
def show_current_time(self):
current_datetime = datetime.datetime.now()
daynow = weekend[datetime.datetime.today().isoweekday()]
monthnow = month[current_datetime.month]
self.timer = QtCore.QTimer()
self.timer.setInterval(1000)
self.timer.timeout.connect(lambda: self.label_2.setText(QtCore.QTime.currentTime().toString("hh:mm")))
self.timer.timeout.connect(lambda: self.label_3.setText(f"{daynow}, {current_datetime.day} {monthnow}"))
self.timer.start()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = mainWindow()
ui.Ui_Form(Form)
Form.show()
sys.exit(app.exec_())
Нужно, чтобы при нажатии на кнопку с функцией protokol открывался новый интерфейс с кодом:
class Protokol(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(960, 616)
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
self.widget.setObjectName("widget")
self.label = QtWidgets.QLabel(self.widget)
self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
self.label.setText("")
self.label.setObjectName("label")
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
self.pushButton_2.setStyleSheet("border-image: url(:/images/zero.png);")
self.pushButton_2.setText("")
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_2.clicked.connect(self.setMainWindow)
self.label_2 = QtWidgets.QLabel(self.widget)
self.label_2.setGeometry(QtCore.QRect(116, 80, 681, 402))
self.label_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-radius: 7px;")
self.label_2.setText("")
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.widget)
self.label_3.setGeometry(QtCore.QRect(120, 100, 671, 131))
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def setMainWindow(self):
print("MainWindow")
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_3.setText(_translate("Form", "Составить протокол"))
А так же, при нажатии на кнопку с функцией mainWindow интерфейс переходил на первую главную страницу.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
import sys
# ??? import res
import datetime
# ??? import time
from PyQt5 import QtCore, QtGui, QtWidgets
weekend = [
"Empty", "понедельник", "вторник", "среда",
"четверг", "пятница", "суббота", "воскресенье"
]
month = [
"Empty", "января", "февраля", "марта", "апреля",
"мая", "июня", "июля", "августа", "сентября",
"октября", "ноября", "декабря"
]
class Ui_Form(object):
def setupUi(self, Form):
# self.show_current_time()
Form.setObjectName("Form")
Form.resize(960, 616)
Form.setWindowFlags(QtCore.Qt.FramelessWindowHint)
Form.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
self.widget.setObjectName("widget")
self.label = QtWidgets.QLabel(self.widget)
self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
self.label.setText("")
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.widget)
self.label_2.setGeometry(QtCore.QRect(120, 115, 670, 61))
font = QtGui.QFont()
font.setPointSize(48)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setStyleSheet("color: rgb(255, 255, 255);")
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.widget)
self.label_3.setGeometry(QtCore.QRect(120, 173, 671, 31))
font = QtGui.QFont()
font.setPointSize(12)
self.label_3.setFont(font)
self.label_3.setStyleSheet("color: rgb(255, 255, 255);")
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.pushButton = QtWidgets.QPushButton(self.widget)
self.pushButton.setGeometry(QtCore.QRect(148, 277, 50, 50))
self.pushButton.setStyleSheet("border-image: url(Ok.png);\n"
"border-radius: 10px;")
self.pushButton.setText("")
self.pushButton.setObjectName("pushButton")
# self.pushButton.clicked.connect(self.protokol)
self.label_4 = QtWidgets.QLabel(self.widget)
self.label_4.setGeometry(QtCore.QRect(138, 326, 61, 31))
font = QtGui.QFont()
font.setBold(False)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(50)
font.setStrikeOut(False)
font.setKerning(False)
font.setStyleStrategy(QtGui.QFont.PreferDefault)
self.label_4.setFont(font)
self.label_4.setMouseTracking(False)
self.label_4.setTabletTracking(False)
self.label_4.setAcceptDrops(False)
self.label_4.setAutoFillBackground(False)
self.label_4.setStyleSheet("color: rgb(255, 255, 255);")
self.label_4.setScaledContents(False)
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setWordWrap(True)
self.label_4.setObjectName("label_4")
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
self.pushButton_2.setStyleSheet("border-image: url(:/images/zero.png);")
self.pushButton_2.setText("")
self.pushButton_2.setObjectName("pushButton_2")
# self.pushButton_2.clicked.connect(self.setMainWindow)
self.pushButton_3 = QtWidgets.QPushButton(self.widget)
self.pushButton_3.setGeometry(QtCore.QRect(224, 277, 50, 50))
self.pushButton_3.setStyleSheet("border-image: url(:/images/database.png);")
self.pushButton_3.setText("")
self.pushButton_3.setObjectName("pushButton_3")
# self.pushButton_3.clicked.connect(self.DataBase)
self.label_5 = QtWidgets.QLabel(self.widget)
self.label_5.setGeometry(QtCore.QRect(219, 326, 61, 31))
font = QtGui.QFont()
font.setBold(False)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(50)
font.setStrikeOut(False)
font.setKerning(False)
font.setStyleStrategy(QtGui.QFont.PreferDefault)
self.label_5.setFont(font)
self.label_5.setMouseTracking(False)
self.label_5.setTabletTracking(False)
self.label_5.setAcceptDrops(False)
self.label_5.setAutoFillBackground(False)
self.label_5.setStyleSheet("color: rgb(255, 255, 255);")
self.label_5.setScaledContents(False)
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.label_5.setWordWrap(True)
self.label_5.setObjectName("label_5")
self.pushButton_4 = QtWidgets.QPushButton(self.widget)
self.pushButton_4.setGeometry(QtCore.QRect(306, 277, 50, 50))
self.pushButton_4.setStyleSheet("border-image: url(im.png);\n"
"border-radius: 10px;")
self.pushButton_4.setText("")
self.pushButton_4.setObjectName("pushButton_4")
# self.pushButton_4.clicked.connect(self.Koap)
self.label_6 = QtWidgets.QLabel(self.widget)
self.label_6.setGeometry(QtCore.QRect(300, 324, 61, 31))
font = QtGui.QFont()
font.setBold(False)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(50)
font.setStrikeOut(False)
font.setKerning(False)
font.setStyleStrategy(QtGui.QFont.PreferDefault)
self.label_6.setFont(font)
self.label_6.setMouseTracking(False)
self.label_6.setTabletTracking(False)
self.label_6.setAcceptDrops(False)
self.label_6.setAutoFillBackground(False)
self.label_6.setStyleSheet("color: rgb(255, 255, 255);")
self.label_6.setScaledContents(False)
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
self.label_6.setWordWrap(True)
self.label_6.setObjectName("label_6")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_2.setText(_translate("Form", ""))
self.label_3.setText(_translate("Form", ""))
self.label_4.setText(_translate("Form", "Составить протокол"))
self.label_5.setText(_translate("Form", "База данных"))
self.label_6.setText(_translate("Form", "КоАП"))
class Ui_Protokol(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(960, 616)
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
self.widget.setObjectName("widget")
self.label = QtWidgets.QLabel(self.widget)
self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
self.label.setText("")
self.label.setObjectName("label")
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
self.pushButton_2.setStyleSheet("border-image: url(lena.jpg);")
self.pushButton_2.setText("")
self.pushButton_2.setObjectName("pushButton_2")
# self.pushButton_2.clicked.connect(self.setMainWindow)
self.label_2 = QtWidgets.QLabel(self.widget)
self.label_2.setGeometry(QtCore.QRect(116, 80, 681, 402))
self.label_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-radius: 7px;")
self.label_2.setText("")
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.widget)
self.label_3.setGeometry(QtCore.QRect(120, 100, 671, 131))
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label_3.setText(_translate("Form", "Составить протокол"))
# !!! +++
class Protokol(QtWidgets.QWidget, Ui_Protokol): # !!! +++
def __init__(self, parent): # +++ parent
super().__init__()
self.setupUi(self)
self.parent = parent
self.pushButton_2.clicked.connect(self.setMainWindow)
def setMainWindow(self):
print("MainWindow")
self.parent.show()
self.hide()
class MainWindow(QtWidgets.QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
# self.show_current_time()
self.pushButton.clicked.connect(self.up_protocol)
self.pushButton_2.clicked.connect(self.setMainWindow)
self.pushButton_3.clicked.connect(self.dataBase)
self.pushButton_4.clicked.connect(self.koap)
# !!! +++
self.protokol = Protokol(self) # !!! +++
# !!! +++
self.timer = QtCore.QTimer()
self.timer.setInterval(1000)
self.timer.timeout.connect(self.show_current_time)
self.timer.start()
def up_protocol(self):
print("Составить протокол")
self.protokol.show()
self.hide()
def setMainWindow(self):
print("MainWindow")
def dataBase(self):
print("База данных")
def koap(self):
print("КоАП РФ")
def show_current_time(self):
current_datetime = datetime.datetime.now()
daynow = weekend[datetime.datetime.today().isoweekday()]
monthnow = month[current_datetime.month]
self.label_2.setText(QtCore.QTime.currentTime().toString("hh:mm:ss"))
self.label_3.setText(f"{daynow}, {current_datetime.day} {monthnow}")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

