1 回答
TA贡献1862条经验 获得超6个赞
在您的代码中,Form仅用作局部变量,用作setupUi和retranslateUi函数的参数。由于函数中没有这样的参数mode_change,因此 python 会崩溃,因为函数作用域中不存在该引用。
一种可能的解决方案是使用 lambda 进行连接,该 lambda 还将Form实例返回给方法:
# ...
self.checkBox.stateChanged.connect(lambda state: self.mode_change(Form, state))
# ...
def mode_change(self, Form, state):
# ...
除此之外,您的代码还有一个更概念性的问题,那就是您正在尝试编辑使用pyuic(或尝试模仿其行为)生成的文件,这是永远不应该做的事情。要正确使用这些文件,您只需导入它们,并使用有关使用 Designer 的官方文档中建议的方法之一。
最常见和最简单的方法是多重继承方法,您可以从 widget 类和pyuic 类中创建子类。为了使用以下代码,请使用重新生成 python 文件pyuic并将其命名为ui_Form.py.
from PyQt5 import QtWidgets
from ui_Form import Ui_Form
style_sheet = "#Form{background-color: rgb(255,255,255);}"
inverted_ss = "#Form{background-color: rgb(0,0,0);}"
class MyForm(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.checkBox.stateChanged.connect(self.mode_change)
def mode_change(self, state):
if state == QtCore.Qt.Checked:
self.setStyleSheet(inverted)
else:
self.setStyleSheet(style_sheet)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
myForm = MyForm()
myForm.show()
sys.exit(app.exec_())
添加回答
举报