因为是现用现学型的知识,所以就先来个简单套路,想用啥再学:
Step1——搭框架:
- 导入包
- 创建一个应用,并且在最后结束消息循环
- 创建一个UI类
#为防止导入内容过大 import sys from PyQt.QtCore import* from PyQt.QtGui import* from PyQt.QtWidgets import* #创建类 参数为窗口类型 完成初始化函数 class UI(QTabWidget): def __init__(self,parent+None): super(QTabWidget,self).__init__(parent) #创建应用 显示窗口 结束消息循环 if __name__=='__main__': app=QApplication(sys.argv) demo=UI() demo.show() sys.exit(app.exec_())
Step2——在主窗口类里面添加内容:
- 设置窗口名字
self.setWindowTitle("...")
- 设置总体布局(需要一个QWidget来收容整体布局)
#创建5个选项卡小控件窗口 self.tab1=QWidget() self.tab2=QWidget() self.tab3=QWidget() self.tab4=QWidget() self.tab5=QWidget() #将五个选项卡添加到顶层窗口中 self.addTab(self.tab1, "Tab 1") self.addTab(self.tab2, "Tab 2") self.addTab(self.tab3, "Tab 3") self.addTab(self.tab4, "Tab 4") self.addTab(self.tab5, "Tab 5") #每个选项卡自定义的内容 self.tab1UI() self.tab2UI() self.tab3UI() self.tab4UI() self.tab5UI()
比如我这里是选项卡主窗口(五个):
- 设置局部布局(就是一层套一层)
def tab5UI(self): #全局布局 whole_layout=QVBoxLayout() ###局部布局 #表单布局 form_layout=QFormLayout() #水平布局 h_layout=QHBoxLayout() #表单布局内容 self.DT_le=QLineEdit(); self.DT_ac_label=QLabel(); self.DT_ti_label=QLabel(); form_layout.addRow('请输入实验次数:',self.DT_le) form_layout.addRow('平均准确率:',self.DT_ac_label) form_layout.addRow('平均花费时间:',self.DT_ti_label) #水平布局内容 self.DT_btn=QPushButton(self) self.DT_btn.setText("开始训练") self.DT_btn.clicked.connect(self.compute5) h_layout.addWidget(self.DT_btn) #准备部件装小布局 form=QWidget() h=QWidget() form.setLayout(form_layout) h.setLayout(h_layout) #设置整体布局 whole_layout.addWidget(form) whole_layout.addWidget(h) #设置选项卡的小标题与布局方式 self.setTabText(4,'DT') self.tab5.setLayout(whole_layout)
看上图就可以知道这些代码
- 添加事件(这里要添加对self的理解,它是对于主窗口来说的)
#在布局里面的代码 self.DT_btn=QPushButton(self) self.DT_btn.setText("开始训练") self.DT_btn.clicked.connect(self.compute5) #就是它 h_layout.addWidget(self.DT_btn) #类里面的响应函数 def compute5(self): ac_sum=0; ti_sum=0; times=self.DT_le.text() if times=='': times='0' for i in range(int(times)): ac,ti= DT_MNIST.main() ac_sum+=ac ti_sum+=ti ac=ac_sum/int(times) ti=ti_sum/int(times) self.DT_ac_label.setText(str(ac)) self.DT_ti_label.setText(str(ti))