我在Qt中创建了一个.ui文件的接口,然后将其转换为python文件。然后,我想为组件添加一些功能,例如单选按钮等。为此,我尝试从Qt重新实现该类并添加我的事件。但它给出了以下错误:
self.radioButton_2.toggled.connect(self.radioButton2Clicked)
NameError: name 'self' is not defined
我的第一个问题是,这是否是处理Qt生成的类的正确/正确方法?第二,为什么我会收到错误?
我的代码在这里:
import sys
from PySide import QtCore, QtGui
from InterfaceClass_Test01 import Ui_MainWindow
class MainInterface(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainInterface, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
def setupUi(self, MainWindow):
super(MainInterface, self).setupUi(parent, MainWindow)
self.radioButton.toggled.connect(self.radioButtonClicked)
self.radioButton_2.toggled.connect(self.radioButton2Clicked)
self.radioButton_3.toggled.connect(self.radioButton3Clicked)
def radioButton3Clicked(self, enabled):
pass
def radioButton2Clicked(self, enabled):
pass
def radioButtonClicked(self, enabled):
pass
答案 0 :(得分:1)
生成的文件有点不直观。 UI类只是一个简单的包装器,并不是Qt Designer中顶级窗口小部件的子类(正如您所料)。
相反,UI类有一个setupUi
方法,它接受顶级类的实例。此方法将添加Qt Designer中的所有小部件,并使它们成为传入实例的属性(通常为self
)。属性名称取自Qt Designer中的objectName
属性。将Qt给出的默认名称重置为更易读的名称是个好主意,以便以后可以轻松引用它们。 (并且在完成更改后不要忘记重新生成UI模块!)
导入UI的模块最终应如下所示:
import sys
from PySide import QtCore, QtGui
from InterfaceClass_Test01 import Ui_MainWindow
class MainInterface(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainInterface, self).__init__(parent)
# inherited from Ui_MainWindow
self.setupUi(self)
self.radioButton.toggled.connect(self.radioButtonClicked)
self.radioButton_2.toggled.connect(self.radioButton2Clicked)
self.radioButton_3.toggled.connect(self.radioButton3Clicked)
def radioButton3Clicked(self, enabled):
pass
def radioButton2Clicked(self, enabled):
pass
def radioButtonClicked(self, enabled):
pass