我使用pyside6的QT Designer制作了图形界面,并且转换成了py文件,在主程序中使用“类”可以正常工作,但我不想把整个程序都写到这一个类里面,如果写外部函数又调用不了类里面的按钮,文本框等(比如禁用按钮,设置文本显示)。
我的问题是:
1如何不使用“类”来实现 按钮连接函数 和 窗口的正常显示与工作,请给出简明的示例代码。
2如果用“类”,那么如何用外部函数来设置按钮禁用和文本内容显示,请给出简明示例代码。
3主程序中的self.setupUi(self)是什么意思?(为什么要写这句)
十分感谢!
主程序
class Widget(QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.tsb.clicked.connect(self.testspeed)
def speed(self):
self.cs.setText("测速中")
self.cs.setEnabled(False)
self.info.setText('测速中。。。')
self.sccs_thread = Thread(target=self.sccs) # 建立线程实例
self.sccs_thread.start() # 开启线程
界面文件
class Ui_Form(object):
def setupUi(self, Form):
if not Form.objectName():
Form.setObjectName(u"Form")
Form.resize(989, 997)
#测速按钮
self.tsb = QPushButton(Form)
self.tsb.setObjectName(u"cs")
self.tsb.setFont(font)
#信息显示窗口
self.info = QTextBrowser(Form)
self.info.setObjectName(u"info")
self.info.setFont(font)
解答:
1.如果不使用类,可以在主程序中直接实例化界面文件中的组件,并连接信号和槽。示例代码如下:
def testspeed():
print("测速中")
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Ui_Form()
form.tsb.clicked.connect(testspeed)
form.show()
sys.exit(app.exec_())
2.如果使用类,可以在外部函数中传入类的实例,通过实例访问类中的组件。示例代码如下:
class Widget(QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.tsb.clicked.connect(self.testspeed)
def disable_button(widget):
widget.tsb.setEnabled(False)
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = Widget()
disable_button(widget)
widget.show()
sys.exit(app.exec_())
3.self.setupUi(self) 是将界面文件中定义的组件和布局应用到类的实例上,使得类的实例可以显示界面并对组件进行操作。