python使⽤Qt界⾯以及逻辑实现⽅法
⽤过Qt的朋友特别是QtCreator的习惯在界⾯UI上⾯对应的CPP中写代码。但是在PyQt中不是这样的。pyQt只是个界⾯,只会⽣成界⾯即UI,就算是⼀个按钮也需要在python只⾃⼰写。不会想当然的槽函数⾃动⽣成那么简单了。
安装pyQt5 pip3 install pyQt
安装设计器pip3 install pyQt-tools
打开Qt5tools中的设计器
做⼀个界⾯,随便放⼏个控件
需要处理事件的可以在python中使⽤Connect 也可以在编辑Siangls/slot中关于系统的事件或者指定事件。实现的内容这⾥做不到。只是界⾯
这是⼏种编辑⽅式
这是我编辑了⼀个单击事件名称。
如果你编辑了,等界⾯帮你connect 信号与槽了。界⾯中有两个按钮⼀个使⽤设计器连接,⼀个⼿⼯连接。做个区别
⽣成的.ui⽂件存,然后转化说到转化就是.ui变.py的过程 .py在python中是可以直接使⽤的。
在Script中有个⽤这个转化,有的编辑⼯具中使⽤配置好的⼯具链也可以。这⾥先使⽤命令
pyuic5 C:\Users\gucunlin\test\testDialog.ui -o C:\Users\gucunlin\test\testDialog.py
⽣成后的py⽂件如下
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(300, 440, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(Dialog)
self.pushButton_2.setGeometry(QtCore.QRect(450, 440, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(360, 190, 156, 23))
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.calendarWidget = QtWidgets.QCalendarWidget(Dialog)
self.calendarWidget.setGeometry(QtCore.QRect(10, 290, 248, 197))
self.calendarWidget.setObjectName("calendarWidget")
self.progressBar = QtWidgets.QProgressBar(Dialog)
self.progressBar.setGeometry(QtCore.QRect(40, 250, 211, 23))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.verticalScrollBar = QtWidgets.QScrollBar(Dialog)
self.verticalScrollBar.setGeometry(QtCore.QRect(330, 220, 16, 160))
self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
self.verticalScrollBar.setObjectName("verticalScrollBar")
self.horizontalScrollBar = QtWidgets.QScrollBar(Dialog)
self.horizontalScrollBar.setGeometry(QtCore.QRect(380, 110, 160, 16))
self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
self.horizontalScrollBar.setObjectName("horizontalScrollBar")
self.t(Dialog.PushButton1Clicked)
tSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = anslate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "PushButton"))
self.pushButton_2.setText(_translate("Dialog", "PushButton"))
看到只是对控件的位置属性进⾏定义⽽已,其中
python安装教程非常详细self.t(Dialog.PushButton1Clicked)是对单击事件的处理名称进⾏关联
⼤家都知道界⾯需要有类合并来⽀撑这个界⾯。⽤过Qt的应该知道。界⾯有了还需要⼀个类与界⾯合并,可以想像这个类相当于cpp和.h⽂件吧ui只有两个函数setupUi和retranslateUi想当于安装ui或释放ui吧
看到setupUi的参数没有,定义的类就是这个参数。看到self.t(Dialog.PushButton1Clicked),应该推断PushButton1Clicked是在Dialog参数中。需要我们在定义的类中实现这个函数
我们来定义⼀个类
class testForm(QtWidgets.QDialog):
def PushButton1Clicked(self):
box = QtWidgets.QMessageBox()
box.warning(self,"提⽰","这是⼀个按钮事件")
由于我们的界⾯是QDialog需要类也丛QDialog中继承下来下⾯开始主函数,⼤家都知道主函数是程序的⼊⼝吧
import sys
if __name__=='__main__':
app=QtWidgets.QApplication(sys.argv) #外部参数列表
Form=testForm() #我就是要合体的类哦如果是空的可以直接定义 QtWidgets.QDialog也是可以的,会让新⼿很迷惑
ui=Ui_Dialog() #啊啊啊,界⾯类也实例化了
ui.setupUi(Form) #我要合体了
Form.show() #合体后的成功展⽰喽
<_()) #退出中使⽤的消息循环,结束消息循环时就退出程序
以上就是界⾯的全套了。看运⾏效果
单击第⼀个按钮
有效果现在做出改变,在main函数中⼜是定义UI⼜是装载UI太⿇烦,这⾥我们集成到testDialog类中,这样使⽤的时候⾮常⽅便注释掉除了⽣成的所有的代码,新建⼀个py⽂件,引⽤⽣成的⽂件,按钮⼆的连接也放到类中去
from testDialog import Ui_Dialog
from PyQt5 import QtCore, QtGui, QtWidgets
class testDiaog(QtWidgets.QDialog):
def __init__(self):
QtWidgets.QDialog.__init__(self)
self.ui = Ui_Dialog()
self.ui.setupUi(self)#像⾃⼰在⽇⾃⼰
self.ui.pushButton_t(self.PushButtonClicked2)
def PushButton1Clicked(self):
box = QtWidgets.QMessageBox()
box.warning(self,"提⽰","这是⼀个按钮事件")
def PushButtonClicked2(self):
self.close() #关闭
import sys
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = testDiaog()
window.show()
<_())
运⾏后单击第⼆个按钮界⾯关闭,为了⽅便截图改⼀下
def PushButtonClicked2(self):
# self.close() #关闭
box = QtWidgets.QMessageBox()
box.warning(self, "提⽰", "这是第⼆个按钮")
运⾏效果图如下
基本上就这些了,到此结束,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论