Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

pyqt5与QT5

2019/09/17 C++ 环境配置 Python
Word count: 1,594 | Reading time: 7min

Pyqt5和QT5

拖拽式布局

添加QT DesignerPyUIcPyrcc

1.添加外部工具(Extenal Tools)

QT Designer

File–>Settings–>Tools–>Extenal Tools --> ‘’+’’ > 添加具体细节,如图一图二

2

​ 图一

1

​ 图二

修改NameQT Designer,ProgramQT目录下designer.exe文件,不需要参数,Work directoryD:\QT\{QT version}\msvc2015_64\bin

designer_pro

添加后就可以在菜单栏的Tools中找到…点击后,就可以直接打开QT Designer设计窗口

QTdesigner_finish

QT Designer

5


QT UIC

1.Program设置为当前虚拟环境的python解释器python.exe,(一旦设置好后,每次新建虚拟环境,pycharm会自动帮你修改选择的解释器)

pyUIC

2.▲.Arguments参数设置为:

1
2
3
4
5
-m
PyQt5.uic.pyuic
$FileName$
-o
$FileNameWithoutExtension$.py

这个参数主要是用uic这个工具需要指定的参数

3.working directory设置为$FileDir$(当前文件目录)===>含义是:根据.UI生成的py窗口文件的位置

完成后,效果如图…一开始是没有window.py

ui

将光标选择window.ui文件,然后选择Tools里面的PyUIC就可以自动生成一个window.py文件直接使用了.

控制台输出内容:

1
2
3
G:\PyGui\venv\Scripts\python.exe -m PyQt5.uic.pyuic window.ui -o window.py
#点击PyUIC就相当于输出了在setting里面写好的代码,$FileName$为我们光标选择的文件名,输出的名字为$FileNameWithoutExtension$.py,输出的路径为当前文件目录$FileDir$
Process finished with exit code 0

ui1

QT Rcc

1.将program设置为QT目录下的rcc.exe文件

rcc_setting1

2.设置Arguments

1
2
3
$FileName$
-o
$FileNameWithoutExtension$.py

道理同上-o 是输出的意思

3.work directory设置为$FileDir$

4.新建.qrc资源文件

打开QT Designer选择下面的资源管理器,单击铅笔,如图操作

qrc建立

单击左边蓝色的存储后,意思是指定.qrc文件存储位置

qrc

选择好以后,再操作右边的选择卡,填好前缀,然后点击蓝色的按键,选择要添加的资源文件(如图片什么的)

qrc加载

此时打开.qrc文件就可以看到他指定了哪些资源文件

qrc_finish

上述步骤完成后就可以使用rcc工具将.qrc文件转换成.py的资源文件使用了

rcc

光标选择.qrc资源后,选择Pyrcc后就会生成相应的py文件

rcc_finish

需要用到图片时,直接导入图片的.py文件即可

1
2
[mainwindow.py]
import picture
1
2
3
4
5
6
7
8
9
10
11
12
13
[main.py]
#显示加载界面
if __name__ == '__main__':
app = QApplication(sys.argv)
splash = QSplashScreen(QPixmap(':/load/loading.jpg'))
splash.show()
splash.showMessage('正在加载请稍等..')
time.sleep(0.5)
app.processEvents()
ui = caofunction.MyWindow()
ui.show()
splash.finish(ui)
sys.exit(app.exec_())

Main.py

1
2
3
4
5
6
7
8
9
import sys
import caofunction
from PyQt5.QtWidgets import QApplication, QMainWindow

if __name__ == '__main__':
app = QApplication(sys.argv)
ui = caofunction.MyWindow()
ui.show()
sys.exit(app.exec_())

1
2
3
4
5
6
7
8
启动窗口的run()函数
# if __name__ == "__main__":
# app = QtWidgets.QApplication(sys.argv)
# Dialog = QtWidgets.QDialog()
# ui = Ui_Dialog()
# ui.setupUi(Dialog)
# Dialog.show()
# sys.exit(app.exec_())

槽函数.py

1
2
3
4
5
6
7
8
9
10
11
12
13
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMessageBox
import hello

class MyWindow(QtWidgets.QMainWindow,hello.Ui_MainWindow):
def __init__(self,parent=None):
QtWidgets.QMainWindow.__init__(self,parent)
# super(MyWindow,self).__init__()
self.setupUi(self)
self.pushButton_2.clicked.connect(self.pint)

def pint(self):
my_choice = QMessageBox.information(self,'提示框','Maybe wrong')

一个bottom最好只对应一个槽函数。


信号与槽连接函数:

1
2
3
4
5
6
self.pushButton_2.clicked.connect(Ui_MainWindow.pint)
*connect()括号中可以选为/Ui_MainWindow/(父类类名),/MainWindow/(父类中实例窗口名),/继承父类Ui_MainWindow的子类类名/,还有一种/self.pint/*
★/*Qt5中的槽函数不在限定必须是slot,可以是普通的函数、类的普通成员函数、lambda函数等*/

▲注意是pint,而不是pint(),传入的是函数的名称(函数地址)
△如果在子类和父类中重复了connect,则会被执行多遍

QMessageBox:

information

question

warning

critial

about

aboutQT

用户输入对话框:

1
2
3
4
5
6
7
8
my_choice = QInputDialog.getText(self,'字符串','请在此处输入',QLineEdit.Normal,'...')
返回的是一个元祖(str,bool)
my_choice = QInputDialog.getText(self,'字符串','请在此处输入',2,0,30)//最后2:最小和最大
返回的是一个元祖(int,bool)
---
my = ['apple','orange']
my_choice = QtWidgets.QInputDialog.getItem(self,'输入框','请在此输入',my)
■.pyqt5中没有Qstring类型,所以没有QString()

加载界面设计:

1
2
3
4
5
6
7
8
9
10
11
if __name__ == '__main__':
app = QApplication(sys.argv)
splash = QSplashScreen(QPixmap(':/test/3.jpg'))
splash.show()
splash.showMessage('正在加载请稍等')
time.sleep(0.5)
app.processEvents()
ui = caofunction.MyWindow()
ui.show()
splash.finish(ui)
sys.exit(app.exec_())

转化.qrc资源文件为py文件:

-o ui_form.py form.ui
1
CMD: pyrcc5 -o picture.py picture.qrc

菜单栏

1
2
3
4
5
6
7
class MyWindow(QtWidgets.QMainWindow,hello.Ui_MainWindow):
def __init__(self,parent=None):
QtWidgets.QMainWindow.__init__(self,parent)
self.action_4.triggered.connect(self.exit)

def exit(self):
self.close()

类中再定义函数时,定义和调用应为:

1
2
3
4
5
6
7
8
9
10
11
12
self.mostphoto(file_path)#调用

def mostphoto(self,filename):
import re
with open(filename, 'r', encoding='utf-8') as f:
data = f.read()
times = re.findall(re.compile(r"(\d\d):\d\d:\d\d"), data)
phototimes = re.findall(re.compile(r"[图片]"), data)
if (len(phototimes) > (len(times) - len(phototimes))):
QMessageBox.information(self,'提示框','两位斗图鬼才用表情包征服了彼此')
else:
QMessageBox.information(self,'提示框','情话绵绵,爱情已融入生活中的点滴')

弹出对话框:

1
2
my_info = Dialog()
my_info.exec_()

QApplication类代表应用程序,在每个程序中只能有一个它的实例。在有图形界面的程序中必须有一个QApplication类的实例,并且必须在所有窗口类的实例生成之前生成。它最主要的功能是实现主事件循环。在主事件循环内,窗口才可以相应消息,并对事件做出处理。QApplication类的exec方法代表启动主事件循环.在主事件循环内,窗口才可以响应消息,并对事件做出处理。QApplication类的exec方法代表启动主事件循环,这个函数在正常运行时不会返回,只有当主事件循环退出时才返回,通常这也就意味着整个程序要退出。

​ QApplication类的构造函数接受与main函数相同的参数,它也能够处理执行程序时的命令行参数。这里的参数传递是必需的,因为在执行程序时要用到QApplication类才能识别的-qws参数。


本文来自 Tyrion-Lannister 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/HMSIWTV/article/details/7533524?utm_source=copy

信号与槽

pyQT使用教程

Author: Mrli

Link: https://nymrli.top/2018/11/26/pyqt与QT5/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
Pyinstaller使用
NextPost >
机器学习——数学概念
CATALOG
  1. 1. 拖拽式布局
    1. 1.1. 1.添加外部工具(Extenal Tools)
      1. 1.1.1. QT Designer
      2. 1.1.2. QT UIC
      3. 1.1.3. QT Rcc
  2. 2. 槽函数.py
  3. 3. 信号与槽连接函数:
    1. 3.1. QMessageBox:
    2. 3.2. 用户输入对话框:
    3. 3.3. 转化.qrc资源文件为py文件: