【发布时间】:2021-07-19 00:51:51
【问题描述】:
在上周搜索和谷歌搜索后,我尝试将 now 类与 PyQt5 一起使用。
我有两个窗口。一个是 MainWindow,另一个是 PrefWindow。 每个 GUI 上都有两个按钮和一个带有文本的标签。 使用第一个按钮,我可以更改标签文本及其背景颜色。
我使用第二个按钮更改 GUI 并转到 PrefWindow
在另一个 GUI PrefWindow 上也是如此。 我可以使用第二个按钮更改标签的文本和背景颜色 我回到主窗口。
问题是 MainWindow 上的更改在从 PrefWindow 返回后消失了。 我试图保存每个窗口标签的文本和背景颜色 但它会崩溃,并在下方显示 QLabel 已被删除的错误消息。为什么会崩溃?
错误信息:
Traceback(最近一次调用最后一次):文件 “C:/Users/m.owzar/PycharmProjects/Relais_Tester/Question.py”,行 132、在ChangeToMainWindow MainWindow().lbl_1.setText(lab_text_1) RuntimeError: QLabel 类型的包装 C/C++ 对象已被删除
已包装的 QLabel 类型的 C/C++ 对象 删除 进程完成并退出 代码 1
我的代码如下:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
lab_text_1 = ''
lab_bg_color_1 = ''
lab_text_2 = ''
lab_bg_color_2 = ''
class MainWindow(QWidget):
def __init__( self ):
super().__init__()
self.setGeometry(100, 100, 500, 400)
self.setWindowTitle("Saving Window status")
self.createMainWindow()
def createMainWindow( self ):
self.vbox_1 = QVBoxLayout()
self.lbl_1 = QLabel('Label 1 Init')
self.lbl_1.move(50, 50)
self.lbl_1.setStyleSheet('font-size: 13pt; color: blue; background-color:lightgreen; font-weight: bold;')
self.btnChange_1 = QPushButton("Change Label Text")
self.btnChange_1.setFixedSize(200, 50)
self.btnChange_1.clicked.connect(self.chaneLabelText_1)
self.btnChange_1.setStyleSheet('font-size: 12pt; color: blue; background-color:lightcyan; font-weight: bold;')
self.btnSettings = QPushButton("Settings")
self.btnSettings.setFixedSize(200, 50)
self.btnSettings.clicked.connect(self.ChangeToPrefWindow)
self.btnSettings.setStyleSheet('font-size: 12pt; color: blue; background-color:lightcyan; font-weight: bold;')
self.vbox_1.addWidget(self.lbl_1)
self.vbox_1.addWidget(self.btnChange_1)
self.vbox_1.addWidget(self.btnSettings)
self.setLayout(self.vbox_1)
def chaneLabelText_1(self):
print('Label Text before: ' + self.lbl_1.text())
self.lbl_1.setText('Labl 1 is new.\nIts Background color is also new!')
print('Label Text after: ' + self.lbl_1.text())
lbl_1_bg_color = self.lbl_1.palette().color(QPalette.Base).name()
print('Label Background color before: ' + lbl_1_bg_color)
self.lbl_1.setStyleSheet('font-size: 16pt; color: blue; background-color:cyan; font-weight: bold;')
lbl_1_bg_color = self.lbl_1.palette().color(QPalette.Base).name()
print('Label Background color after: ' + lbl_1_bg_color)
# Go to PrefWindow
#####################################################################
def ChangeToPrefWindow(self):
lab_text_1 = self.lbl_1.text()
lab_bg_color_1 = self.lbl_1.palette().color(QPalette.Base).name()
# PrefWindow().lbl_2.setText(lab_text_2)
# PrefWindow().lab_bg_color_2.setStyleSheet(f'font-size: 16pt; color: blue; background-color:{lab_bg_color_2}; font-weight: bold;')
self.cams = PrefWindow()
self.cams.show()
self.close()
class PrefWindow(QWidget):
def __init__( self ):
super().__init__()
self.setGeometry(100, 100, 500, 400)
self.setWindowTitle("Settings Window")
self.createPrefWindow()
def createPrefWindow( self ):
self.vbox_2 = QVBoxLayout()
self.lbl_2 = QLabel('Label 2 Init')
self.lbl_2.move(50, 50)
self.lbl_2.setStyleSheet('font-size: 13pt; color: blue; background-color:lightgreen; font-weight: bold;')
self.btnChange_2 = QPushButton("Change Label Text")
self.btnChange_2.setFixedSize(200, 50)
self.btnChange_2.clicked.connect(self.chaneLabelText_2)
self.btnChange_2.setStyleSheet('font-size: 12pt; color: blue; background-color:lightcyan; font-weight: bold;')
self.btnSave = QPushButton("Save and Quit")
self.btnSave.setFixedSize(200, 50)
self.btnSave.setStyleSheet('font-size: 12pt; color: blue; background-color:lightcyan; font-weight: bold;'
)
self.btnSave.clicked.connect(self.ChangeToMainWindow)
self.vbox_2.addWidget(self.lbl_2)
self.vbox_2.addWidget(self.btnChange_2)
self.vbox_2.addWidget(self.btnSave)
self.setLayout(self.vbox_2)
def chaneLabelText_2(self):
print('Label Text before: ' + self.lbl_2.text())
self.lbl_2.setText('Labl 2 is new. \nIts Background color is also new!')
print('Label Text after: ' + self.lbl_2.text())
lbl_2_bg_color = self.lbl_2.palette().color(QPalette.Base).name()
print('Label Background color before: ' + lbl_2_bg_color)
self.lbl_2.setStyleSheet('font-size: 16pt; color: blue; background-color:cyan; font-weight: bold;')
lbl_2_bg_color = self.lbl_2.palette().color(QPalette.Base).name()
print('Label Background color after: ' + lbl_2_bg_color)
# Go to MainWindow
#####################################################################
def ChangeToMainWindow( self ):
lab_text_2 = self.lbl_2.text()
lab_bg_color_2 = self.lbl_2.palette().color(QPalette.Base).name()
MainWindow().lbl_1.setText(lab_text_1)
MainWindow().lab_bg_color_1.setStyleSheet(f'font-size: 16pt; color: blue; background-color:{lab_bg_color_1}; font-weight: bold;')
self.cams = MainWindow()
self.cams.show()
self.close()
def main():
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys._excepthook = sys.excepthook
def exception_hook( exctype, value, traceback ):
print(exctype, value, traceback)
sys._excepthook(exctype, value, traceback)
sys.exit(1)
sys.excepthook = exception_hook
sys.exit(app.exec_())
if __name__ == '__main__':
main()
【问题讨论】: