- 1:QT For Python 学习备忘
- 1.1:01. 手写的界面
- 1.2:02. 从 UI 文件加载
- 1.3:03. 对 UI 文件转化成 py 文件之后的使用
QT For Python 学习备忘
01. 手写的界面
01. 代码
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit
app = QApplication([])
window = QMainWindow()
window.resize(500, 400)
window.move(300, 310)
window.setWindowTitle('薪资统计')
textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)
button = QPushButton('统计', window)
button.move(380,80)
window.show()
app.exec_()
02. 大纲框架
导入
APP 后端部分 ( 不显示, 处理信号与槽函数 )
Windows ( 控件的子项, 带菜单栏的控件 )
界面绘制
Windows 显示
界面保持显示
02. 从 UI 文件加载
01. 代码
from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile
class Stats:
def __init__(self):
# 从文件中加载UI定义
qfile = QFile("D:/Code/aistudio/LvJianYu/ui/jiemian.ui")
qfile.open(QFile.ReadOnly)
qfile.close()
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
# 比如 self.ui.button , self.ui.textEdit
self.ui = QUiLoader().load(qfile)
self.ui.button1.clicked.connect(self.handleCalc)
def handleCalc(self):
info = self.ui.text1.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_()
02. 大纲框架
导入
定义新类
其中初始化构造函数作为 控件
读取加载 UI 文件
动态创建 窗口对象Windows ( 控件的子项, 带菜单栏的控件 )
信号与槽连接
动作函数
主流程
APP 后端部分
读取上面创建的类作为 Windows, 界面绘制, 信号与槽连接
Windows 显示
界面保持显示
03. 对 UI 文件转化成 py 文件之后的使用
01. 复杂使用
#导入
from PySide2.QtWidgets import QMainWindow, QApplication, QMessageBox, QWidget
from jiemian import Ui_Form
# 新建一个继承 QWidget 的叫 NewWindow(NW) 的类对象 待绑定对象 ( 空对象 )
class NW(QWidget):
def __init__(self):
super().__init__()#或者写为: super(NW, self).__init__() 特殊父类继承
self.setWindowTitle("加载")
self.resize(1000,1000)
#初始化构造函数
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
Window = NW()
#以下把所有控件怼到 NewWindow(NW) 这个类对象身上
from jiemian import Ui_Form
ui = Ui_Form()
ui.setupUi(Window)
#最终显示窗口 必备项
Window.show()
sys.exit(app.exec_())
#####################################
01. 简化过之后
#导入
from PySide2.QtWidgets import QMainWindow, QApplication, QMessageBox, QWidget
from jiemian import Ui_Form
# 新建一个继承 QWidget 的叫 NewWindow(NW) 的类对象 待绑定对象 ( 空对象 )
class NW(QWidget, Ui_Form):#多继承 既继承 QWidget 也继承 Ui_Form
def __init__(self):
super().__init__()#或者写为: super(NW, self).__init__() 特殊父类继承
self.setWindowTitle("加载")
self.resize(1000,1000)
self.setupUi(self)
# self.SAS()
#自定义信号与槽连接
# def SAS(self):
# pass
#初始化构造函数
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
Window = NW()
#最终显示窗口 必备项
Window.show()
sys.exit(app.exec_())
#####################################