摘要:
前面介绍了前面介绍了部分qt知识,其中ui文件,在用python和c++时差别不大。但也有一些,比如在c++的ui文件下可以右键直接转到槽函数。在python里没这功能(可能是因为我不熟悉)。程序的执行操作如下,先创建.py文件,然后创建.ui文件,并在里面进行拖拽布置界面。回到.py文件加载.ui文件。例如设置了一个按钮,点击后执行一个函数,把计算结果显示到一个窗口,可以通过self.pushButton.clicked.connect(self.addfunction)设置pushButton按钮触发addfunction,把函数结算结果通过setText显示到textEdit_3。
【0】安装pysid2
pip install pyside2
pip install pyside2 -i https://pypi.douban.com/simple/
【1】
用QT的术语来解释上面这行代码,就是:把 button 被 点击(clicked) 的信号(signal), 连接(connect)到了 handleCalc 这样的一个 slot上。大白话就是:让 handleCalc 来 处理 button 被 点击的操作。
【2】
转自http://www.python3.vip/tut/py/gui/qt_03/
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
# 比如 self.ui.button , self.ui.textEdit
self.ui = QUiLoader().load('main.ui')
self.ui.button.clicked.connect(self.handleCalc)
【3】创建工程步骤
(1)创建.py文件
(2)创建.ui文件
(3)这俩文件在一个步骤的话,就可以用 uic.loadUiType('mainwindow.ui')方法加载.ui文件了。
(4)空间名字如图所示,在下面的代码中对应。
【4】计算器例子,其中
(1)pushButton,textEdit_2,textEdit,textEdit_3都是在qt designer中拖拽出的控件的名字。
(2)pushButton触发函数addfunction。
(3)addfunction函数中通过toPlainText获取textEdit_2,textEdit内容,然后执行相加操作,
最后通过setText,设置textEdit_3所显示内容。
转自https://www.jianshu.com/p/bb5cb2b21165
#绿色字体部分可以看做是固定的格式部分。
----------------------------------------------------------------------------------------------------------
import sys
from PyQt5 import uic, QtWidgets
(form_class, qtbase_class) = uic.loadUiType('mainwindow.ui')
class MainWindow(form_class, qtbase_class):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
#【1】定义按钮所触发的函数
self.pushButton.clicked.connect(self.addfunction)
#【2】定义按钮所触发的函数
def addfunction(self):
#【2.1】把textEdit输入的内容赋值给a b,相加后得c
a = float(self.textEdit.toPlainText())
b = float(self.textEdit_2.toPlainText())
c = a + b
#【2.2】把c显示到textEdit_3
self.textEdit_3.setText(str(c))
self.textBrowser.append("%.2f + %.2f = %.2f" % (a, b, c))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())
-------------------------------------------------------------------------------------------------------------------
import sys
from PyQt5 import uic, QtWidgets
(form_class, qtbase_class) = uic.loadUiType('mainwindow.ui')
class MainWindow(form_class, qtbase_class):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.addfunction)
def addfunction(self):
a = float(self.textEdit.toPlainText())
b = float(self.textEdit_2.toPlainText())
c = a + b
self.textEdit_3.setText(str(c))
self.textBrowser.append("%.2f + %.2f = %.2f" % (a, b, c))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())
【4】布局
选中后可右键选择布局。从小到大。
也可以点击下图位置进行布局
【5】把pyqt5------->转换成pysid2(据说这个是qt官方搞出来的,以后的支持会越来越好),改的时候有一个报错,把几个dll库换了个位置就可以了、
import sys
from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtUiTools import QUiLoader
class Stats:
def __init__(self):
self.ui = QUiLoader().load('mainwindow.ui')
self.ui.pushButton.clicked.connect(self.addfunction)
def addfunction(self):
a = float(self.ui.textEdit.toPlainText())
b = float(self.ui.textEdit_2.toPlainText())
c = a + b
self.ui.textEdit_3.setText(str(c))
self.ui.textBrowser.append("%.2f + %.2f = %.2f" % (a, b, c))
app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()
【6】打包(转载自http://www.python3.vip/tut/py/gui/qt_04/)
(1)
pyinstaller 文件名.py --noconsole --hidden-import PySide2.QtXml
这样就会在当前目录下产生一个名为 dist
的目录。里面就有一个名为 httpclient 的目录,我们的可执行程序 httpclient.exe 就在里面。
其中
--noconsole
指定不要命令行窗口,否则我们的程序运行的时候,还会多一个黑窗口。 但是我建议大家可以先去掉这个参数,等确定运行成功后,再加上参数重新制作exe。因为这个黑窗口可以显示出程序的报错,这样我们容易找到问题的线索。
--hidden-import PySide2.QtXml
参数是因为这个 QtXml库是动态导入,PyInstaller没法分析出来,需要我们告诉它。
(2)把.ui文件复制到dist里也,然后点击里面的.exe就可以运行了。
给别人用的时候,只需要给她dist的压缩包即可。
【7】添加主窗口图标
我们程序运行的窗口,需要显示自己的图标,这样才更像一个正式的产品。
通过如下代码,我们可以把一个png图片文件作为 程序窗口图标。
from PySide2.QtGui import QIcon
app = QApplication([])
# 加载 icon
app.setWindowIcon(QIcon('logo.png'))
注意:这些图标png文件,在使用PyInstaller创建可执行程序时,也要拷贝到程序所在目录。否则可执行程序运行后不会显示图标。
【8】应用程序图标
可以在PyInstaller创建可执行程序时,通过参数 --icon="logo.ico"
指定。比如
pyinstaller httpclient.py --noconsole --hidden-import PySide2.QtXml --icon="logo.ico"
【9】单选框可选择布局,进行分割。或放到gropbox
【10】