Qt Designer 简介
上节讲的是通过代码创建一个一个界面,但是这种方式需要反复调试,才能呈现我们想要的位置,太麻烦。
因此出现了 QT 界面生成器 Qt Designer
,直接通过拖拽就可以直观的创建出程序大体的界面。
windows 打开位置:
运行在Python安装目录下 Lib\site-packages\PySide2\designer.exe
界面的创建
选择 Widget
创建
使用Plain Text Edit
创建一个用户输入的文本框
选择 Push Button
创建我们的点击按钮,然后双击创建的这个按钮修改名字为“统计”
接下来创建输入提示,
1、找到QPlain TextEdit
这个类
2、在下面的属性里找到 placeholderText
,然后在其右侧输入 你要输入的提示信息
3、在左侧的创建窗口可以显示你输入的提示信息
修改主窗口标题,在Form
对象里的属性windowTitle
中修改
然后保存为 stats.ui 文件
界面的加载
from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile
class Stats:
def __init__(self):
# 从文件中加载UI定义
qfile_stats = QFile("stats.ui")
qfile_stats.open(QFile.ReadOnly)
qfile_stats.close()
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
# 比如 self.ui.button , self.ui.textEdit
self.ui = QUiLoader().load(qfile_stats)
self.ui.button.clicked.connect(self.handleCalc)
def handleCalc(self):
info = self.ui.textEdit.toPlainText()
salary_above_20k = ''
salary_below_20k = ''
for line in info.splitlines():
if not line.strip():
continue
parts = line.split(' ')
parts = [p for p in parts if p]
name,salary,age = parts
if int(salary) >= 20000:
salary_above_20k += name + '\n'
else:
salary_below_20k += name + '\n'
QMessageBox.about(self.ui,
'统计结果',
f'''薪资20000 以上的有:\n{salary_above_20k}
\n薪资20000 以下的有:\n{salary_below_20k}'''
)
app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()
使用PyQt5
如果使用的是 PyQt5 而不是 PySide2,加载UI文件的代码如下
from PyQt5 import uic
class Stats:
def __init__(self):
# 从文件中加载UI定义
self.ui = uic.loadUi("main.ui")
完整代码
from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5 import uic
class Stats:
def __init__(self):
# 从文件中加载UI定义
self.ui = uic.loadUi("stats.ui")
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
# 比如 self.ui.button , self.ui.textEdit
self.ui.button.clicked.connect(self.handleCalc)
def handleCalc(self):
info = self.ui.textEdit.toPlainText()
salary_above_20k = ''
salary_below_20k = ''
for line in info.splitlines():
if not line.strip():
continue
parts = line.split(' ')
parts = [p for p in parts if p]
name, salary, age = parts
if int(salary) >= 20000:
salary_above_20k += name + '\n'
else:
salary_below_20k += name + '\n'
QMessageBox.about(self.ui,
'统计结果',
f'''薪资20000 以上的有:\n{salary_above_20k}
\n薪资20000 以下的有:\n{salary_below_20k}'''
)
app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()
参考:http://www.python3.vip/doc/tutorial/python/level2/gui/qt_03/