python pyqt5学习笔记 2020.9.23 (stacked layout 实现按钮切换页面,选择文件夹)

25 篇文章 2 订阅

stacked layout 实现按钮切换页面

实现按钮切换页面流程如下:

#创建按钮,连接功能
self.main_btn = QtWidgets.QToolButton(self.menubox)
self.main_btn.setText("主页")
self.main_btn.setObjectName("main_btn")
self.main_btn.setGeometry(QtCore.QRect(0,0,100,100))
self.main_btn.clicked.connect(Form.set_main_index)
self.main_btn.setAutoRaise(True)
       
self.label_btn = QtWidgets.QToolButton(self.menubox)
self.label_btn.setText("图片标注")
self.label_btn.setObjectName("label_btn")
self.label_btn.setGeometry(QtCore.QRect(100,0,100,100))
self.label_btn.clicked.connect(Form.set_label_index)
self.label_btn.setAutoRaise(True)

#创建一个stacked
self.stacked = QtWidgets.QStackedLayout(self.windowbox)

#创建子界面
self.main_frame = QtWidgets.QMainWindow()
self.label1 = QtWidgets.QLabel(self.main_frame)
self.label1.setGeometry(QtCore.QRect(0,0,100,20))
self.label1.setText("第一个界面")

self.label_frame = QtWidgets.QMainWindow()
self.label2 = QtWidgets.QLabel(self.label_frame)
self.label2.setGeometry(QtCore.QRect(0,0,100,20))
self.label2.setText("第二个界面")

#将子界面添加到stacked中
self.stacked.addWidget(self.main_frame)
self.stacked.addWidget(self.label_frame)

#页面跳转功能函数(我一般与界面分开两个类来写,所以需要用self.ui来调用窗口控件)
def set_main_index(self):
    if self.ui.stacked.currentIndex() != 0:
       self.ui.stacked.setCurrentIndex(0)

def set_label_index(self):
    if self.ui.stacked.currentIndex() != 1:
       self.ui.stacked.setCurrentIndex(1)

我写的一段完整代码

from PyQt5 import QtCore,QtGui,QtWidgets,Qt
import sys

#界面
class Ui(object):    
    def setupUi(self,Form): 
        Form.setObjectName("Form")            
        Form.setWindowTitle("整合工具")        
        Form.resize(1920,1080)
        
        #选单栏
        self.menubox = QtWidgets.QGroupBox(Form)          
        self.menubox.setGeometry(QtCore.QRect(0,0,1920,100))        
        self.menubox.setObjectName("menubox")                    

        #切页主页按钮
        self.main_btn = QtWidgets.QToolButton(self.menubox)
        self.main_btn.setText("主页")
        self.main_btn.setObjectName("main_btn")
        self.main_btn.setGeometry(QtCore.QRect(0,0,100,100))
        self.main_btn.clicked.connect(Form.set_main_index)
        self.main_btn.setAutoRaise(True)

        #切页图片标注按钮
        self.label_btn = QtWidgets.QToolButton(self.menubox)
        self.label_btn.setText("图片标注")
        self.label_btn.setObjectName("label_btn")
        self.label_btn.setGeometry(QtCore.QRect(100,0,100,100))
        self.label_btn.clicked.connect(Form.set_label_index)
        self.label_btn.setAutoRaise(True)

        #切页模型训练按钮
        self.train_btn = QtWidgets.QToolButton(self.menubox)
        self.train_btn.setText("模型训练")
        self.train_btn.setObjectName("train_btn")
        self.train_btn.setGeometry(QtCore.QRect(200,0,100,100))
        self.train_btn.clicked.connect(Form.set_train_index)
        self.train_btn.setAutoRaise(True)

        #切页图像识别按钮
        self.dist_btn = QtWidgets.QToolButton(self.menubox)
        self.dist_btn.setText("图像识别")
        self.dist_btn.setObjectName("dist_btn")
        self.dist_btn.setGeometry(QtCore.QRect(300,0,100,100))
        self.dist_btn.clicked.connect(Form.set_dist_index)
        self.dist_btn.setAutoRaise(True)

        #切页相机设置按钮
        self.camera_btn = QtWidgets.QToolButton(self.menubox)
        self.camera_btn.setText("相机设置")
        self.camera_btn.setObjectName("camera_btn")
        self.camera_btn.setGeometry(QtCore.QRect(400,0,100,100))
        self.camera_btn.clicked.connect(Form.set_camera_index)
        self.camera_btn.setAutoRaise(True)

        #用来存放stacked界面
        self.windowbox = QtWidgets.QGroupBox(Form)          
        self.windowbox.setGeometry(QtCore.QRect(0,100,1920,980))        
        self.windowbox.setObjectName("windowbox")  
        
        #创建一个stacked
        self.stacked = QtWidgets.QStackedLayout(self.windowbox)

        #main_frame界面
        self.main_frame = QtWidgets.QMainWindow()
        self.label1 = QtWidgets.QLabel(self.main_frame)
        self.label1.setGeometry(QtCore.QRect(0,0,100,20))
        self.label1.setText("第一个界面")

        #label_frame 界面
        self.label_frame = QtWidgets.QMainWindow()
        self.label2 = QtWidgets.QLabel(self.label_frame)
        self.label2.setGeometry(QtCore.QRect(0,0,100,20))
        self.label2.setText("第二个界面")

        #train_frame 界面
        self.train_frame = QtWidgets.QMainWindow()
        self.label3 = QtWidgets.QLabel(self.train_frame)
        self.label3.setGeometry(QtCore.QRect(0,0,100,20))
        self.label3.setText("第三个界面")

        #dist_frame 界面
        self.dist_frame = QtWidgets.QMainWindow()
        self.label4 = QtWidgets.QLabel(self.dist_frame)
        self.label4.setGeometry(QtCore.QRect(0,0,100,20))
        self.label4.setText("第四个界面")

        #camera_frame 界面
        self.camera_frame = QtWidgets.QMainWindow()
        self.label5 = QtWidgets.QLabel(self.camera_frame)
        self.label5.setGeometry(QtCore.QRect(0,0,100,20))
        self.label5.setText("第五个界面")

        # 把切页的界面放到stacked中
        self.stacked.addWidget(self.main_frame)
        self.stacked.addWidget(self.label_frame)
        self.stacked.addWidget(self.train_frame)
        self.stacked.addWidget(self.dist_frame)
        self.stacked.addWidget(self.camera_frame)

#功能
class MainWindow(QtWidgets.QMainWindow):    
    def __init__(self,parent=None):        
        super(MainWindow,self).__init__(parent)        
        self.ui=Ui()        
        self.ui.setupUi(self)        

    def set_main_index(self):
        if self.ui.stacked.currentIndex() != 0:
            self.ui.stacked.setCurrentIndex(0)

    def set_label_index(self):
        if self.ui.stacked.currentIndex() != 1:
            self.ui.stacked.setCurrentIndex(1)

    def set_train_index(self):
        if self.ui.stacked.currentIndex() != 2:
            self.ui.stacked.setCurrentIndex(2)

    def set_dist_index(self):
        if self.ui.stacked.currentIndex() != 3:
            self.ui.stacked.setCurrentIndex(3)

    def set_camera_index(self):
        if self.ui.stacked.currentIndex() != 4:
            self.ui.stacked.setCurrentIndex(4)

if __name__=="__main__":    
    app=QtWidgets.QApplication(sys.argv)    
    win=MainWindow()    
    win.showFullScreen()   
    sys.exit(app.exec_())

部分代码参考自:https://blog.csdn.net/s_daqing/article/details/104792859/

执行结果(就放了前两页):
在这里插入图片描述
在这里插入图片描述

选择文件/文件夹

选择单个文件QFileDialog.getOpenFileName()
选择多个文件QFileDialog.getOpenFileNames()
选择文件夹QFileDialog.getExistingDirectory()
使用时可以使用path = QFileDialog.getOpenFileName()来接收,如果要在其他函数中使用这个 path,可以先将path声明为全局变量,例如:

#按钮功能,选择文件夹
def select_dir(self):
    global path
    path=Qt.QFileDialog.getExistingDirectory()  

文件保存QFileDialog.getSaveFileName()
另存文件为 ,用法:https://blog.csdn.net/qq_44683653/article/details/106712862

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值