python使用Qt界面以及逻辑实现方法


Posted in Python onJuly 10, 2019

用过Qt的朋友 特别是QtCreator的习惯在界面UI上面对应的CPP中写代码。但是在PyQt中不是这样的。pyQt只是个界面,只会生成界面即UI,就算是一个按钮也需要在python只自己写。不会想当然的找槽函数自动生成那么简单了。

安装pyQt5 pip3 install pyQt  

安装设计器 pip3 install pyQt-tools

打开Qt5tools中的设计器

python使用Qt界面以及逻辑实现方法

做一个界面,随便放几个控件

python使用Qt界面以及逻辑实现方法

需要处理事件的可以在python中使用Connect 也可以在编辑Siangls/slot中关于系统的事件或者指定事件。实现的内容这里做不到。只是界面python使用Qt界面以及逻辑实现方法

这是几种编辑方式

python使用Qt界面以及逻辑实现方法

这是我编辑了一个单击事件名称 。

如果你编辑了,等界面帮你connect 信号与槽了。界面中有两个按钮一个使用设计器连接,一个手工连接。做个区别

生成的.ui文件存,然后转化 说到转化就是.ui变.py的过程 .py在python中是可以直接使用的。

在Script中有个pyuic5.exe用这个转化,有的编辑工具中使用配置好的工具链也可以。这里先使用命令
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")
    Dialog.resize(657, 496)
    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.columnView = QtWidgets.QColumnView(Dialog)
    self.columnView.setGeometry(QtCore.QRect(40, 30, 256, 192))
    self.columnView.setObjectName("columnView")
    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.retranslateUi(Dialog)
    self.pushButton.clicked.connect(Dialog.PushButton1Clicked)
        QtCore.QMetaObject.connectSlotsByName(Dialog)


def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "PushButton"))
self.pushButton_2.setText(_translate("Dialog", "PushButton"))

看到只是对控件的位置属性进行定义而已,其中

self.pushButton.clicked.connect(Dialog.PushButton1Clicked)是对单击事件的处理名称进行关联

大家都知道界面需要有类合并来支撑这个界面。用过Qt的应该知道。界面有了还需要一个类与界面合并,可以想像这个类相当于cpp和.h文件吧

ui只有两个函数setupUi和retranslateUi想当于安装ui或释放ui吧

看到setupUi的参数没有,定义的类就是这个参数 。看到self.pushButton.clicked.connect(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()   #合体后的成功展示喽
  sys.exit(app.exec_()) #退出中使用的消息循环,结束消息循环时就退出程序

以上就是界面的全套了。看运行效果

python使用Qt界面以及逻辑实现方法

单击第一个按钮

python使用Qt界面以及逻辑实现方法

有效果现在做出改变,在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_2.clicked.connect(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()
  sys.exit(app.exec_())

运行后单击第二个按钮界面关闭,为了方便截图改一下

def PushButtonClicked2(self):
# self.close() #关闭
box = QtWidgets.QMessageBox()
  box.warning(self, "提示", "这是第二个按钮")

运行效果图如下

python使用Qt界面以及逻辑实现方法

基本上就这些了,到此结束,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
python使用suds调用webservice接口的方法
Jan 03 Python
django Admin文档生成器使用详解
Jul 22 Python
基于python实现上传文件到OSS代码实例
May 09 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
selenium自动化测试入门实战
Dec 21 Python
python中os.remove()用法及注意事项
Jan 31 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 Python
用Python实现BP神经网络(附代码)
Jul 10 #Python
OpenCV 模板匹配
Jul 10 #Python
8种用Python实现线性回归的方法对比详解
Jul 10 #Python
Python实现计算对象的内存大小示例
Jul 10 #Python
Python画图高斯分布的示例
Jul 10 #Python
使用Python实现跳一跳自动跳跃功能
Jul 10 #Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 #Python
You might like
PHP&MYSQL服务器配置说明
2006/10/09 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
详解javascript遍历方式
2015/11/11 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
js简单实现网页换肤功能
2017/04/07 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
pandas ix &iloc &loc的区别
2019/01/10 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
入党自我鉴定范文
2013/10/04 职场文书
村干部培训班主持词
2014/03/28 职场文书
三八活动策划方案
2014/08/17 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书