python:pyqt5的基本使用

2023-10-27

文章目录

★基本框架★

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import ico # 导入图标资源


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        # 设置主界面
        QApplication.setStyle('Fusion')
        self.setWindowTitle('Title')  # 设置窗体名称
        self.setWindowIcon(QIcon(':/w.png')) # 设置窗体图标
        self.resize(400, 300)  # 更改窗体大小
        self.setFixedSize(self.width(), self.height())  # 禁止拉伸窗口大小
        

        # 设置控件
        self.b_1 = QPushButton("启动", self)
        self.b_1.setFixedSize(150, 30)  # 设置控件大小
        
        # 设置布局
        # widget = QWidget() # QMainWindow需添加
        h_1 = QHBoxLayout()  # 水平布局
        h_1.addWidget(self.b_1)
        v = QVBoxLayout()  # 垂直布局
        # v.addStretch(1)
        v.addLayout(h_1)
        self.setLayout(v) # QMainWindow需删除
        # widget.setLayout(v) # QMainWindow需添加
        # self.setCentralWidget(widget) # QMainWindow需添加
        # 设置信号
        self.b_1.clicked.connect(self.main)
    
    # 槽函数
    def main(self):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

★程序启动画面★

if __name__ == '__main__':
	app = QApplication(sys.argv) # 原有
 
	splash = QSplashScreen()
	splash.setPixmap(QPixmap('images/splash.jpg'))
	splash.show()
	splash.showMessage('string', Qt.AlignBottom | Qt.AlignCenter, Qt.white)
 
	demo = Demo() # 原有
	demo.show() # 原有
	
	splash.finish(demo)
 
	sys.exit(app.exec_()) # 原有

一、设置主界面

1、窗体字体设置

font = QFont("宋体")  # 实例化字体
font.setPixelSize(16)  # 设置字体大小
self.setFont(font)  设置字体

2、界面设置

常用:
QApplication.setStyle('Fusion')	# 设置控件样式
self.setWindowTitle('title') # 设置窗体名称
self.resize(300, 250) # 更改窗体大小
self.setFixedSize(self.width(), self.height())  # 设置固定界面(控件)大小,不能拉伸,也不能最大化

其他:
self.setWindowIcon('path') # 设置窗体图标
self.size() # 获取窗体大小
self.width() # 获取窗体宽度
self.height() # 获取窗体高度
self.setFixedWidth(int width) # 设置窗体宽度
self.setFixedHeight(int height) # 设置窗体高度
self.setGeometry(int x, int y, int width, int height) # 设置窗口位置
self.frameGeometry() # 获取窗口的大小和位置
self.move(int x, int y) # 设置窗口的位置
self.pos() # 获取窗口左上角坐标
self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint) # 禁止最大化按钮
QStyleFactory.keys() # 获取当前平台支持的样式
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # 窗口置顶
# self.setWindowFlags(QtCore.Qt.Widget) #取消置顶

setWindowFlags的参数:

参数 说明
FramelessWindowHint 设置窗体无边框,不可拖动拖拽拉伸
MSWindowsFixedSizeDialogHint 固定窗口,无法调整大小
CustomizeWindowHint 有边框,无标题栏与按钮,不能移动和拖动
WindowTitleHint 添加标题栏与关闭按钮
WindowSystemMenuHint 添加系统目录和关闭按钮
WindowMaximizeButtonHint 激活最大化按钮与关闭按钮,禁止最小化按钮
WindowMinimizeButtonHint 激活最小化按钮与关闭按钮,禁止最大化按钮
WindowMinMaxButtonsHint 激活最大化与最小化按钮和关闭按钮
WindowCloseButtonHint 设置窗口的标题栏只有关闭的按钮
WindowContextHelpButtonHint 添加问号与关闭按钮,像对话框一样
WindowStaysOnTopHint 窗口始终处于顶部位置
windowStaysOnButtonHint 窗口始终处于底部位置

PS:多个参数之间用竖杠'|'分隔。

二、设置控件

1、QMessageBox消息框

1、基本格式

QMessageBox.information(QWidget, ‘Title’, ’Content‘, buttons)

第一个参数填self,表示该信息框属于我们这里的Demo窗口;第二个参数类型为字符串,填入的是该信息框的标题;第三个参数类型也是字符串,填入的是信息框的提示内容;最后个参数为信息框上要添加的按钮。多个按钮之间用
| 来连接,常见的按钮种类有以下几种:

QMessageBox.Ok
QMessageBox.Yes
QMessageBox.No
QMessageBox.Close
QMessageBox.Cancel
QMessage.Open
QMessage.Save
2、各种类型的框

类型 名称
QMessageBox.information 消息框
QMessageBox.question 问答框
QMessageBox.warning 警告框
QMessageBox.critical 错误框
QMessageBox.about 关于框

3、与消息框进行交互

choice = QMessageBox.question(self, 'Title', 'Content', QMessageBox.Yes | QMessageBox.No) 
if choice == QMessageBox.Yes:   
    pass
elif choice == QMessageBox.No: 
	pass

2、文本编辑框和文本浏览框

实例化控件

self.text_edit = QTextEdit(self) # 文本编辑框
self.text_browser = QTextBrowser(self) # 文本浏览框

设置信号

控件类型 信号 描述
QTextEdit textChanged 文本发生改变

控件方法

控件类型 方法 描述
QTextEdit setText(‘Content’) 设置文本
QTextEdit toPlainText() 获取文本
QTextEdit setTextColor(color) 设置文本颜色
QTextEdit setFont(font) 设置字体

3、各种按钮

QPushButton,QToolButton,QRadioButton和QCheckBox均继承自QAbstractButton类

实例化控件

self.test_button = QPushButton('Test', self) # 实例化按钮
self.test_button = QPushButton('&Download',self) # 实例化按钮并设置快捷键为Alt+D
self.test_button = QToolButton(self) # 工具按钮(初始不能传入文本)
self.on_button = QRadioButton('on', self) # 单选按钮
self.checkbox1 = QCheckBox('Checkbox 1', self) # 复选框的三种状态:全选中、半选中和无选中

设置信号

控件类型 信号 描述
通用 Pressed 当鼠标指针在按钮上并按下左键时触发该信号
通用 Released 当鼠标左键被释放时触发该信号
通用 Clicked 当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号
通用 Toggled 当按钮的标记状态发生改变时触发该信号
QCheckBox stateChanged 复选框状态发生改变

控件方法

控件类型 方法 描述
通用 isDown() 提示按钮是否已按下
通用 isChecked() 提示按钮是否已经标记
通用 isEnable() 提示按钮是否可以被用户点击
通用 isCheckAble() 提示按钮是否为可标记的
通用 setAutoRepeat() 设置按钮是否在用户长按时可以自动重复执行
通用 setShortcut(‘Ctrl+D’) 设置按钮快捷键
QPushButton setCheckable(True) 设置按钮是否已经被选中,如果设置True,则表示按钮将保持已点击和释放状态
QPushButton toggle() 在按钮状态之间进行切换
QPushButton setIcon(QIcon(‘button.png’)) 设置图标
QPushButton setEnabled() 设置按钮是否可以使用,当设置为False时,按钮变成不可用状态,点击它不会发射信号
QPushButton isChecked() 判断按钮是否为标记状态,若是则返回True,不是则返回False
QPushButton setDefault() 设置按钮的默认状态
QPushButton setText(‘text’) 设置按钮的显示文本
QPushButton text() 返回按钮的显示文本
QToolButton setArrowType(参数1) 设定button上显示的箭头类型
QToolButton setToolButtonStyle(参数2) 设定button文本和图标显示的样式
QRadioButton setChecked(True) 单选按钮设为选中状态
QCheckBox setChecked(True) 将复选框设为选中或无选中状态
QCheckBox setCheckState(Qt.Checked) 选中状态Qt.Checked, 无选中状态Qt.Unchecked和半选中状态Qt.PartiallyChecked
QCheckBox setTristate(True) 让一个复选框拥有三种状态
QCheckBox setCheckState(Qt.PartiallyChecked) 让一个复选框拥有三种状态
QCheckBox checkState() 获取当前复选框的状态,返回值为int类型,0为无选中状态,1为半选中状态,2为选中状态
参数1 箭头属性
Qt.NoArrow 无箭头
Qt.UpArrow 向上的箭头
Qt.DownArrow 向下的箭头
Qt.LeftArrow 向左的箭头
Qt.RightArrow 向右的箭头
参数2 样式
Qt.ToolButtonIconOnly 只显示图标
Qt.ToolButtonTextOnly 只显示文本
Qt.ToolButtonTextBesideIcon 文本在图标下面
Qt.ToolButtonTextUnderIcon 文本在图标上面
Qt.ToolButtonFollowStyle 未知…

4、标签

实例化控件

self.label = QLabel(self) 

控件方法

控件类型 方法 描述
QLabel setPixmap(QPixmap(‘on.png’)) 给标签设置图片
QLabel setAlignment(Qt.AlignCenter) 设置标签对齐方式

5、单行文本框

实例化控件

self.lineedit = QLineEdit(self)

控件方法

控件类型 方法 描述
QLineEdit setFont(combobox.currentFont()) 设置字体
QLineEdit setPlaceholderText() 设置文本框显示文字
QLineEdit setMaxLength() 设置文本框所允许输入的最大字符数
QLineEdit setReadOnly() 设置文本为只读
QLineEdit setText() 设置文本框的内容
QLineEdit text() 返回文本框的内容
QLineEdit setDragEnable() 设置文本框是否接受拖动
QLineEdit selectAll() 全选
QLineEdit setFocus() 得到焦点
QLineEdit setAlignment(参数1) 按固定值方式对齐文本
QLineEdit setEchoMode(参数2) 设置文本框的显示格式
QLineEdit setValidator(参数3) 设置文本框的验证器(验证规则),将限制任意可能输入的文本
QLineEdit setInputMask(参数4) 设置掩码
参数1 功能
Qt.AlignLeft 水平方向靠左对齐
Qt.AlignRight 水平方向靠右对齐
Qt.AlignCenter 水平方向居中对齐
Qt.AlignJustify 水平方向调整间距两端对齐
Qt.AlignTop 垂直方向靠上对齐
Qt.AlignBottom 垂直方向靠下对齐
Qt.AlignVCenter 垂直方向居中对齐
参数2 功能
QLineEdit.Normal 正常显示所输入的字符,此为默认选项
QLineEdit.NoEcho 不显示任何输入的字符,常用于密码类型的输入,且长度保密
QLineEdit.Password 显示与平台相关的密码掩饰字符,而不是实际输入的字符
QLineEdit.PasswordEchoOnEdit 在编辑时显示字符,负责显示密码类型的输入
参数3 功能
QIntValidator 限制输入整数
QDoubleValidator 限制输入浮点数
QRegexpValidator 检查输入是否符合正则表达式
参数4 功能
000.000.000.000;_ ip地址,空白字符是‘_’
HH:HH:HH:HH:HH:HH; MAC地址
0000-00-00 日期,空白字符是空格
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# 许可证号,空白字符是‘_’,所有字母都转换为大写

设置信号

控件类型 信号 描述
QLineEdit selectionChanged 只要选择改变了,这个信号就会发射
QLineEdit textChanged 当修改文本内容时,这个信号就会发射
QLineEdit editingFinished 当编辑文本结束时,这个信号就会发射

6、下拉选择框和数字调节框

实例化控件

self.combobox_1 = QComboBox(self) # 普通下拉框(无内容)
self.combobox_2 = QFontComboBox(self) # 字体下拉框(有字体选择)
self.spinbox = QSpinBox(self) # 数字调节框(默认范围0-99)
self.doublespinbox = QDoubleSpinBox(self) # 浮点数字调节框(默认范围0.00-99.99)

设置信号

控件类型 信号 描述
QComboBox currentIndexChanged 序号发生变化
QComboBox currentTextChanged 文本发生变化
QSpinBox valueChanged 数字发生变化

控件方法

控件类型 方法 描述
QComboBox setCurrentIndex(2) 设置默认值选项
QComboBox addItem(self.choice) 添加一个选项
QComboBox addItems(self.choice_list) 添加多个选项
QComboBox currentIndex() 获取当前文本序号
QComboBox currentText() 获取当前文本
QComboBox currentFont() 获取当前字体
QDoubleSpinBox setDecimals(int) 设置小数位数
QSpinBox setRange(-99, 99) 设置范围
QSpinBox setSingleStep(1) 设置步长,即每次点击递增或递减多少值
QSpinBox setValue(66) 设置初始显示值
QSpinBox value() 获取值
QSpinBox setValue(value) 设置调节框的值

7、滑动条和旋钮

实例化控件

self.slider_1 = QSlider(Qt.Horizontal, self) # 水平滑动条
self.slider_2 = QSlider(Qt.Vertical, self) # 垂直滑动条
self.dial = QDial(self) # 旋钮

设置信号

控件类型 信号 描述
QSlider valueChanged 数值发生改变
QDial valueChanged 改变表盘数值

控件方法

控件类型 方法 描述
QSlider setRange(0, 100) 设置滑动条的范围
QSlider setMinimum(0) 设置最小值
QSlider setMaximum(100) 设置最大值
QSlider value() 获取值
QSlider setValue(value) 设置值
QDial setFixedSize(100, 100) 固定旋钮的大小
QDial setRange(0, 100) 设置表盘数值范围
QDial setMinimum(0) 设置最小值
QDial setMaximum(100) 设置最大值
QDial setNotchesVisible(True) 显示刻度

8、定时器和进度条

实例化控件

self.timer = QTimer(self) # 定时器
self.progressbar = QProgressBar(self) # 进度条,默认是水平的
self.progressbar.setOrientation(Qt.Vertical) # 让进度条垂直显示

设置信号

控件类型 信号 描述
QTimer timeout timer.start()结束时触发

控件方法

控件类型 方法 描述
QTimer isActive() 判断定时器是否处于激活状态
QTimer start(100) 启动计时器持续100毫秒
QTimer stop() 停止计时器
QTimer setSingleShot(True) 触发timeout信号后只调用一次update_func()
QProgressBar setMinimum(0) 设置最小值
QProgressBar setMaximum(100) 设置最大值
QProgressBar setRange(0, 100) 设置范围
QProgressBar setValue(value) 设置进度条当前值
QProgressBar reset() 重置进度条的值

9、数字显示屏

实例化控件

self.lcd = QLCDNumber(self) # 数字显示屏

控件方法

控件类型 方法 描述
QLCDNumber setDigitCount(10) 设置显示多少位数字
QLCDNumber display(1234567890) 显示数字
QLCDNumber setSegmentStyle(参数1) 设置显示屏数字样式
QLCDNumber setSmallDecimalPoint(True) 设置小数点的显示方式,若为True,则占位,若为False,则会单独占位
QLCDNumber display(0.123456789) 显示数字
QLCDNumber display(‘HELLO’) 显示字母
QLCDNumber setMode(参数2) 更改数字显示方式
参数1 描述
QLCDNumber.Outline 0 让内容浮显,其颜色同显示屏背景颜色相同
QLCDNumber.Filled 1 让内容浮显,颜色同窗口标题颜色相同
QLCDNumber.Flat 2 让内容扁平化显示,颜色同窗口标题颜色相同
参数2 描述
QLCDNumber.Hex 0 十六进制
QLCDNumber.Dec 1 十进制
QLCDNumber.Oct 2 八进制
QLCDNumber.Bin 3 二进制

10、状态栏

实例化控件

self.statusbar = self.statusBar() # 状态栏

控件方法

控件类型 方法 描述
addWidget() 在状态栏中添加给定的窗口小控件对象
addPermanentWidget() 在状态栏中永久添加给定的窗口小控件对象
showMessage() 在状态栏显示一条临时信息,指定时间间隔
clearMessage() 删除正在显示的临时信息
removeWidget() 从状态栏中移除指定的小控件

添加小控件语法

self.statusbar.addPermanentWidget(self.label, stretch=0) # 控件,控件占据空间

状态栏添加进度条

# 设置状态栏
self.statusBar = QStatusBar()
self.statusBar.setStyleSheet('QStatusBar::item {border: none;}')
self.setStatusBar(self.statusBar)
# 设置进度条和标签
self.progressBar = QProgressBar()
self.label1 = QLabel()
self.label1.setText("")
# 状态栏添加控件
self.statusBar.addPermanentWidget(self.label1, stretch=1)
self.statusBar.addPermanentWidget(self.progressBar, stretch=4)

11、HTML展示控件

模块安装:pip install PyQtWebEngine

self.web = QWebEngineView()
方法 描述
load(QUrl url) 加载指定的URL并显示
setHtml(QString&html) 将网页视图的内容设置为指定的HTML内容

三、设置布局

1、实例化布局

v_layout = QVBoxLayout() # 垂直布局
h_layout = QHBoxLayout() # 水平布局
form_layout = QFormLayout() # 表单布局
grid_layout = QGridLayout() # 网格布局

2、给布局添加占位符|控件|布局

self.label.setAlignment(Qt.AlignCenter) # 设置居中方式
h_layout.addStretch(1) # 设置占位符
v_layout.addWidget(self.user_label) # 垂直布局添加控件
h_layout.addWidget(self.user_line)	# 水平布局添加控件
all_v_layout.addLayout(v_layout) # 垂直布局添加垂直布局
all_h_layout.addLayout(h_layout) # 水平布局添加水平布局
form_layout.addRow(self.user_label, self.user_line) # 表单布局添加控件
grid_layout.addWidget(self.user_label, 0, 0, 1, 1) # 网格布局添加控件
grid_layout.addWidget(self.user_label, 0, 0) # 默认是1行1列

QGridLayout的addWidget()方法遵循如下语法形式:

addWidget(widget, row, column, rowSpan, columnSpan)

widget就是要添加的控件;row为第几行,0代表第一行;column为第几列,0代表第一列;rowSpan表示要让这个控件去占用几行(默认一行);columnSpan表示要让这个控件去占用几列(默认一列)。

3、设为整个窗口的最终布局方式

self.setLayout(all_h_layout)

四、各种对话框

1、颜色对话框和字体对话框

color = QColorDialog.getColor() # 颜色对话框(十六进制的值会保存在color变量中)
if color.isValid(): # 判断color是否有效
	self.text_edit.setTextColor(color)

font, ok = QFontDialog.getFont() # 字体对话框
if ok:
	self.text_edit.setFont(font)

2、输入对话框

方法 用法
getItem() 从下拉框中获取选项输入
getInt() 获取整型值输入
getDouble() 获取浮点型值输入
getText() 获取字符串输入
getMultiLineText() 获取多行字符串输入

实例:

content, ok = QInputDialog.getText(self, 'title', 'content')
content, ok = QInputDialog.getInt(self, 'title', 'content')
content, ok = QInputDialog.getDouble(self, 'title', 'content')
content, ok = QInputDialog.getMultiLineText(self, 'title', 'content')
Item, ok = QInputDialog.getItem(self, 'title', 'content', list, 0, False)

getItem(parent, str, str, iterable, int,
bool)方法需要多设置几个参数,前三个与getText()相同,第四个参数为要加入的选项内容,第五个参数为最初显示的选项,最后一个参数是选项内容是否可编辑。

3、文件对话框

path, _ = QFileDialog.getSaveFileName(self, 'title', './', 'Excel Files (*.xlsx;*.xls);;All Files (*)') # 选择保存文件
path, _ = QFileDialog.getOpenFileName(self, 'title', './', 'Excel Files (*.xlsx;*.xls);;All Files (*)') # 选择文件
path, _ = QFileDialog.getOpenFileNames(self, 'title', './', 'Excel Files (*.xlsx;*.xls);;All Files (*)') # 选择多个文件
path = QFileDialog.getExistingDirectory(self, 'title', './') # 选择文件夹

参数:指定父类,文件对话框的标题,对话框打开时显示的路径,文件扩展名过滤器 其中设置文件扩展名过滤,用双分号间隔。

'All Files (*);;PDF Files (*.pdf);;Excel Files (*.xlsx;*.xls);;Text Files (*.txt)'

五、界面关闭事件

def closeEvent(self, QCloseEvent): # 关闭事件函数
	if not self.saved: # 如果未保存
		choice = QMessageBox.question(self, '', 'Do you want to save the text?', QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
		if choice == QMessageBox.Yes: # 如果需要继续保存
			self.saved_func()	# 调用函数进行保存
			QCloseEvent.accept()	# 接受关闭事件
		elif choice == QMessageBox.No: # 如果不需要继续保存
			QCloseEvent.accept()	# 接受关闭事件
		else:
    		QCloseEvent.ignore()	# 忽略关闭事件

六、多窗口实例

1、同一个主界面下切换

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class Demo(QDialog):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.f_1()
        self.f_2()

    def init_ui(self):
        # 设置基本窗口
        self.setWindowTitle('界面')
        self.setFixedSize(300, 200)
        self.setWindowFlags(Qt.WindowCloseButtonHint)

    def f_1(self):
        # 实例化框架1
        self.frame1 = QFrame(self)
        # 设置框架大小
        self.frame1.setFixedSize(300, 200)
        # 设置控件
        self.Button1 = QPushButton("按钮1")
        self.Button2 = QPushButton("按钮2")
        self.Button_enter = QPushButton("进入下一个界面")
        self.Button_enter.setFixedSize(150, 35)
        # 设置布局
        self.h = QHBoxLayout()
        self.h1 = QHBoxLayout()
        self.v = QVBoxLayout()
        self.h.addWidget(self.Button1)
        self.h.addWidget(self.Button2)
        self.h1.addWidget(self.Button_enter)
        self.v.addLayout(self.h)
        self.v.addLayout(self.h1)
        self.frame1.setLayout(self.v)
        # 设置信号
        self.Button_enter.clicked.connect(self.enter_clicked)

    def f_2(self):
        # 实例化框架2
        self.frame2 = QFrame(self)
        # 设置框架大小
        self.frame2.setFixedSize(300, 200)
        # 设置控件
        self.Button_quit = QPushButton("回到主页面")
        self.Button_quit.setFixedSize(150, 35)
        # 设置布局
        self.h = QHBoxLayout()
        self.h.addWidget(self.Button_quit)
        self.frame2.setLayout(self.h)
        # 设置框架2不显示
        self.frame2.setVisible(False)
        # 设置信号
        self.Button_quit.clicked.connect(self.quit_clicked)

    def enter_clicked(self):
        self.frame2.setVisible(True)
        self.frame1.setVisible(False)

    def quit_clicked(self):
        self.frame2.setVisible(False)
        self.frame1.setVisible(True)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    demo = Demo()
    if demo.exec_() == QDialog.Accepted:
        sys.exit(app.exec_())

2、多个界面间切换

import sys
from PyQt5.QtWidgets import *


class FirstUi(QWidget):  # 第一个窗口类
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 设置界面
        self.setFixedSize(300, 200)
        self.setWindowTitle('First Ui')
        # 设置控件
        self.btn = QPushButton('jump')
        # 设置布局
        h = QHBoxLayout()
        h.addWidget(self.btn)
        self.setLayout(h)
        # 设置信号
        self.btn.clicked.connect(self.slot_btn_function)  # 将信号连接到槽

    def slot_btn_function(self):
        # self.hide()  # 隐藏此窗口
        # self.close() # 决定是否关闭当前界面打开新界面
        self.s = SecondUi()
        self.s.show()


class SecondUi(QWidget):  # 建立第二个窗口的类
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 设置界面
        self.setFixedSize(500, 350)
        self.setWindowTitle('Second Ui')
        # 设置控件
        self.btn = QPushButton('jump')
        # 设置布局
        h = QHBoxLayout()
        h.addWidget(self.btn)
        self.setLayout(h)
        # 设置信号
        self.btn.clicked.connect(self.slot_btn_function)  # 将信号连接到槽

    def slot_btn_function(self):
        # self.hide()  # 隐藏此窗口
        self.close()  # 决定是否关闭当前界面打开新界面
        self.f = FirstUi()
        self.f.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = FirstUi()
    w.show()
    sys.exit(app.exec_())

七、问题集锦

1、多进程冻结窗口

问题描述: 在启动多进程时会出现多个窗口
解决方法:

import multiprocessing as mp
mp.freeze_support()  # 多进程冻结窗口

if __name__ == '__main__':上面添加上述代码

2、win32com多线程

问题描述: 在多线程中使用win32com接口时报错
解决方法: 在调用接口及使用相关代码的前后添加函数

import pythoncom
pythoncom.CoInitialize()
pythoncom.CoUninitialize()

Coinitialize是Windows提供的API函数,用来告诉Windows系统单独一个线程创建COM对象。也就是说我这个多线程的脚本里面的线程和这个COM对象的线程创建一个套间,令其可以正常关联和执行。

3、状态栏消息刷新显示

问题描述: 使用多个statusbar.showMessage,界面只显示最后一个消息
解决方法: 添加语句QApplication.processEvents()让屏幕实时刷新,添加时间间隔让程序流畅运行

self.statusbar.showMessage(text)
QApplication.processEvents()
time.sleep(0.01)

4、selenium打包关闭黑框

找到selenium包的文件夹下的servise.py
C:\Users\liuzhi\AppData\Local\Programs\Python\Python38\Lib\site-packages\selenium\webdriver\common\service.py
定位到75行,将源代码修改为:

self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
                               stdout=self.log_file,
                               stderr=self.log_file,
                               stdin=PIPE,
                               creationflags=134217728)

5、pyecharts打包失败

新建py文件hook-pyecharts.py 放在PyInstaller安装目录下
\AppData\Roaming\Python\Python37\site-packages\PyInstaller\hooks\

#-----------------------------------------------------------------------------
 # Copyright (c) 2017-2020, PyInstaller Development Team.
 #
 # Distributed under the terms of the GNU General Public License (version 2
 # or later) with exception for distributing the bootloader.
 #
 # The full license is in the file COPYING.txt, distributed with this software.
 #
 # SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
 #----------------------------------------------------------------------------- 
# Hook for nanite: https://pypi.python.org/pypi/nanite 
from PyInstaller.utils.hooks import collect_data_files 
datas = collect_data_files('pyecharts') 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python:pyqt5的基本使用 的相关文章

随机推荐

  • 如何在mac上安装多版本python并配置PATH

    摘要 mac 默认安装的python是 python3 但是如果我们需要其他python版本时 该怎么办呢 例如 需要python2 版本 如果使用homebrew安装会提示没有python2 同时使用python version 会发现c
  • linux中的ldd命令简介

    在linux中 有些命令是大家通用的 比如ls rm mv cp等等 这些我觉得没有必要再细说了 而有些命令 只有开发人员才会用到的 这类命令 作为程序员的我们 是有必要了解的 有的甚至需要熟练使用 有的人总说 这些命令不重要 用的时候去查
  • Elasticsearch基础学习笔记

    目录 一 全文搜索 1 数据分类 2 搜索分类 3 什么是全文搜索 全文检索是指 倒排索引 二 ElasticSearch简介 1 ElasticSearch是什么 2 ElasticSearch特点 3 ElasticSearch版本特性
  • C++学习(三三八)RSP文件

    RSP Response Text File 是一种资源文件 用编程软件或文本编辑工具可以打开 如VC Notepad等等 RSP 文件包含一个或多个命令行参数 由包含在 NET 编译器平台 也称为Roslyn 中的C 编译器 CSC 使用
  • dns服务器修改解析地址,dns服务器修改解析地址

    dns服务器修改解析地址 内容精选 换一换 obsutil是适用于Windows macOS和Linux操作系统的命令行工具 支持通过配置内网DNS服务器地址的方式 使在华为云上的Linux ECS通过内网直接访问OBS 下面将介绍其具体操
  • 内中断

    1 CPU根据中断码如何找到中断处理程序 要定位中断处理程序 就需要找到中断处理程序的段地址和偏移地址 如果根据中断码找到他们 这就引入中断向量表 CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址 2 使用中断类型码找
  • OpenCV实战(五)——对象简单计数

    现在我们用OpenCV来计数图像当中的目标物体数目 针对各个物体之间没有粘连的情况 include
  • 离散数学 --- 谓词逻辑 --- 谓词合式公式推理

    第一部分 推理形式和推理规则 1 谓词在拥有命题演算的基本蕴含公式的同时 还有着自己独有的基本蕴含公式 当我们的描述在个体和整体之间转换时 就需要进行量词的消去和添加 1 全称特指规则 US规则 其实就是全称量词消去规则 2 全称量词消去有
  • docker-compose

    能做什么 一个用来把 docker 自动化的东西 有了 docker compose 你可以把所有繁复的 docker 操作全都一条命令 自动化的完成 通过创建compose文件 YUML语法 在这个文件上面描述应用的架构 如使用什么镜像
  • 《零基础入门学习Python》(6)--Python之常用操作符

    前言 Python当中常用操作符 有分为以下几类 幂运算 正负号 算术操作符 比较操作符 lt lt gt gt 逻辑运算符 not and or 操作符介绍 幂运算 gt gt gt 3 3 27 正负号 幂运算的优先级比较特殊 因为幂操
  • 凸多边形面积_C++计算任意多边形的面积

    任意多边形的面积计算 拾忆楓灵的博客 CSDN博客 blog csdn net 计算任意多边形的面积 tenos 博客园 www cnblogs com 完美解决计算3D空间任意多边形面积 Studiouss的博客 CSDN博客 blog
  • 微信小程序开发实战 ②〇(Npm包)

    作者 SYFStrive 作者 SYFStrive 博客首页 HomePage 微信小程序 个人社区 欢迎大佬们加入 社区链接 觉得文章不错可以点点关注 专栏连接 感谢支持 学累了可以先看小段由小胖给大家带来的街舞 微信小程序 目录 什么是
  • React 性能优化完全指南,将自己这几年的心血总结成篇!

    作者 MoonBall 原文地址 https juejin cn post 6935584878071119885 本文分为三部分 首先介绍 React 的工作流 让读者对 React 组件更新流程有宏观的认识 然后列出笔者总结的一系列优化
  • MUMPS 安装

    Centos 7 Install MUMPS 1 下载安装包 需要提交申请 http mumps enseeiht fr 2 安装并行版MUMPS需要以下一些依赖包 MPI BLAS library BLACS library ScaLAP
  • C语言种根号怎么表示 比如(1-x)的二分之一次方

    库函数sqrt x include
  • 5.39 综合案例2.0 - STM32蓝牙遥控小车3(摇杆控制)

    综合案例2 0 蓝牙遥控小车1 摇杆控制 成品展示 案例说明 器件说明 小车连线 小车源码 PS2摇杆手柄 遥控连线 摇杆代码 成品展示 用python开发板和stm32制作一个摇杆控制蓝牙全向智能车 源码开放 案例说明 用STM32单片机
  • 《计算机网络》期末模拟考试练习+答案

    期末考试模拟试题参考 一 单选题 共20题 20分 1 下列有线传输介质中抗电磁干扰最好的是 A 屏蔽双绞线 B 同轴电缆 C 非屏蔽双绞线 D 光纤 正确答案 D 解析 2 TELNET通过TCP IP协议在客户机和远程登录服务器之间建立
  • struct和typedef struct的用法解析

    1 首先 注意在C和C 里不同 在C中定义一个结构体类型要用typedef typedef struct Student int a Stu 于是在声明变量的时候就可 Stu stu1 如果没有typedef就必须用struct Stude
  • Calendar对象获取当前周的bug

    项目场景 双周项目管理 需要获取当前周为一年之中的第几周 原先的代码是用Calendar对象 先用setTime 把当前时间传入 再用get 3 获取一年中的第几周 问题描述 实际发现会比真实的周少一点 且时间是周日到周六为一周 原因分析
  • python:pyqt5的基本使用

    文章目录 基本框架 程序启动画面 一 设置主界面 1 窗体字体设置 2 界面设置 二 设置控件 1 QMessageBox消息框 2 文本编辑框和文本浏览框 3 各种按钮 4 标签 5 单行文本框 6 下拉选择框和数字调节框 7 滑动条和旋