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_())
添加回答
舉報