pyqt5(Qt+Python)的使用

pyqt5可实现Qt设计UI界面,Python编写逻辑代码,发挥各自的优势

1. Qt Designer设计UI界面,保存,将.ui文件复制到Python项目文件夹下

2. Qt .ui文件转.py文件

打开Pycharm ->File->Settings-> Tools->External Tools,点击 + ,添加新项目。设置如下:

3. Pycharm中右键复制过来的.ui文件,External Tools->PyUIC,即可获得.ui文件转化后的.py文件。

4. 新建Python文件main.py

import sys
from PyQt5.Qt import *
import mainwindow

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = mainwindow.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

安装需要的package,如PyQt5,运行main.py,即可获得相应界面

5. 界面完成之后,通常还需要信号槽的实现,下面便是在pyqt5中如何使用信号槽

新建Python文件son.py,在该文件里实现信号与槽。这么做的好处是:信号槽的实现代码与界面代码mainwindow.py分开写,界面样式可以随时去Qt Designer更改,然后重新生成mainwindow.py文件,不会影响信号槽的实现。

from mainwindow import *
from PyQt5.QtWidgets import *

class Son(QMainWindow):
    def __init__(self, name=""):
        # 构造函数
        super().__init__()
        self.initUI(name)


    def initUI(self, name):
        # 初始化函数
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.setWindowTitle(name)
        # self.ui.horizontalSlider.setTracking(True)

        # 关联信号槽
        self.ui.horizontalSlider.valueChanged[int].connect(self.setValue)

    # 定义槽函数
    def setValue(self, value):
        self.ui.lineEdit.setText(str(value))

main.py改写为如下

import sys
from PyQt5.Qt import *
import mainwindow
from son import *

if __name__ == '__main__':
    app = QApplication(sys.argv)
    # MainWindow = QMainWindow()
    # ui = mainwindow.Ui_MainWindow()
    # ui.setupUi(MainWindow)
    # MainWindow.show()

    Mainwindow=Son("主界面")
    Mainwindow.show()
    
    sys.exit(app.exec_())

6. 最终效果如下

                                

7. 通过点击按钮,弹出二级界面

重复步骤1,3,获得二级界面的.py文件dialog.py,我这里基类是QDialog

新建son2.py文件,代码如下:

from dialog import *
from PyQt5.QtWidgets import *

class Son2(QDialog):
    def __init__(self, name=""):
        # 构造函数
        super().__init__()
        self.initUI(name)


    def initUI(self, name):
        # 初始化函数
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.setWindowTitle(name)

 son.py添加如下代码,注意一定是self.Page2 .show(),不是Page2 .show()。否则Page2是个临时变量,窗口只是一闪而过。

from son2 import *
# 信号槽关联
self.ui.pushButton.clicked.connect(self.newPage)
#槽函数
    def newPage(self):
        self.Page2 = Son2("二级界面")
        self.Page2 .show()

当使用show时,窗口默认为非模态,此时当前窗口可以与其它窗口进行交互。当使用exec时,为模态窗口,此时会阻塞线程,直到子事件循环退出之后,才能进行下一步操作。

son.py完整代码:

from mainwindow import *
from PyQt5.QtWidgets import *
from son2 import *

class Son(QMainWindow):
    def __init__(self, name=""):
        # 构造函数
        super().__init__()
        self.initUI(name)


    def initUI(self, name):
        # 初始化函数
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.setWindowTitle(name)
        # self.ui.horizontalSlider.setTracking(True)

        # 关联信号槽
        self.ui.horizontalSlider.valueChanged[int].connect(self.setValue)
        self.ui.pushButton.clicked.connect(self.newPage)

    # 定义槽函数
    def setValue(self, value):
        self.ui.lineEdit.setText(str(value))

    def newPage(self):
        self.Page2= Son2("二级界面")
        self.Page2.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值