【PyQt5】界面编写——信号槽
【写在前面的话】
开始学习python界面的编程,之前用是自带的tinker,界面编写比较简单。这次打算用Qt designer来写界面。所以有些关于调用的动作连接之类的弄得不是很清楚,在这里就不是触发动作之类的,而是叫信号槽。根据控件来编写所触发的动作。
【步骤】
1、在直接拉扯控件形成想要的界面。如图1所示:
2、利用前面的转换代码,形成界面代码。
1 from PyQt5 import QtCore, QtGui, QtWidgets 2 3 class Ui_MainWindow(object): 4 def setupUi(self, MainWindow): 5 MainWindow.setObjectName("MainWindow") 6 MainWindow.resize(640, 480) 7 self.centralwidget = QtWidgets.QWidget(MainWindow) 8 self.centralwidget.setObjectName("centralwidget") 9 self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) 10 self.textBrowser.setGeometry(QtCore.QRect(290, 80, 256, 192)) 11 self.textBrowser.setObjectName("textBrowser") 12 self.pushButton = QtWidgets.QPushButton(self.centralwidget) 13 self.pushButton.setGeometry(QtCore.QRect(50, 140, 93, 28)) 14 self.pushButton.setObjectName("pushButton") 15 MainWindow.setCentralWidget(self.centralwidget) 16 self.menubar = QtWidgets.QMenuBar(MainWindow) 17 self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 26)) 18 self.menubar.setObjectName("menubar") 19 MainWindow.setMenuBar(self.menubar) 20 self.statusbar = QtWidgets.QStatusBar(MainWindow) 21 self.statusbar.setObjectName("statusbar") 22 MainWindow.setStatusBar(self.statusbar) 23 24 self.retranslateUi(MainWindow) 25 QtCore.QMetaObject.connectSlotsByName(MainWindow) 26 27 28 29 def retranslateUi(self, MainWindow): 30 _translate = QtCore.QCoreApplication.translate 31 MainWindow.setWindowTitle(_translate("MainWindow", "测试界面")) 32 self.pushButton.setText(_translate("MainWindow", "按一下显示"))
3、然后再写另外一个逻辑代码文件。
1 import sys 2 from PyQt5.QtWidgets import QApplication,QMainWindow 3 from test import * 4 5 6 class MyMainWindow(QMainWindow,Ui_MainWindow): 7 def __init__(self,parent=None): 8 super(MyMainWindow,self).__init__(parent) 9 self.setupUi(self) 10 11 12 if __name__=="__main__": 13 app = QApplication(sys.argv) 14 myWin = MyMainWindow() 15 myWin.show() 16 sys.exit(app.exec())
这个时候能够出现界面了。
4、增加控件的触发动作。
我的要求是,点击一下 pushButton 然后在textbrowser 中显示文本。
那么,需要在界面代码中添加这样一句:
1 self.retranslateUi(MainWindow)
2 self.pushButton.clicked.connect(self.text_show)
3 QtCore.QMetaObject.connectSlotsByName(MainWindow)
text_show 就是后面需要编写的触发动作的函数。
5、然后在逻辑页面中,需要增加 text_show()这个函数的定义。
class MyMainWindow(QMainWindow,Ui_MainWindow): def __init__(self,parent=None): super(MyMainWindow,self).__init__(parent) self.setupUi(self) def text_show(self): self.textBrowser.append("这是我的点击")
********注意:在这里,必须要增加连接的控件的名字,然后只能用控件自己的功能。比如textbrowser 的功能就有append(),能够增加。
6、然后运行逻辑代码,最后形成你想要的界面。
***************************
textbrowser中比如输入的是 文本 str 方式,单纯的list并不能进行显示。必须转换成str
textbrowser中方法的区别:
① insertPlainText(),逐行添加不换行
② setText() ,先清空内容 再添加内容
③append() , 自动换行。