python:pyqt5的基本使用

★基本框架★

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) # 文本浏览框

设置信号

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

控件方法

控件类型方法描述
QTextEditsetText(‘Content’)设置文本
QTextEdittoPlainText()获取文本
QTextEditsetTextColor(color)设置文本颜色
QTextEditsetFont(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当按钮的标记状态发生改变时触发该信号
QCheckBoxstateChanged复选框状态发生改变

控件方法

控件类型方法描述
通用isDown()提示按钮是否已按下
通用isChecked()提示按钮是否已经标记
通用isEnable()提示按钮是否可以被用户点击
通用isCheckAble()提示按钮是否为可标记的
通用setAutoRepeat()设置按钮是否在用户长按时可以自动重复执行
通用setShortcut(‘Ctrl+D’)设置按钮快捷键
QPushButtonsetCheckable(True)设置按钮是否已经被选中,如果设置True,则表示按钮将保持已点击和释放状态
QPushButtontoggle()在按钮状态之间进行切换
QPushButtonsetIcon(QIcon(‘button.png’))设置图标
QPushButtonsetEnabled()设置按钮是否可以使用,当设置为False时,按钮变成不可用状态,点击它不会发射信号
QPushButtonisChecked()判断按钮是否为标记状态,若是则返回True,不是则返回False
QPushButtonsetDefault()设置按钮的默认状态
QPushButtonsetText(‘text’)设置按钮的显示文本
QPushButtontext()返回按钮的显示文本
QToolButtonsetArrowType(参数1)设定button上显示的箭头类型
QToolButtonsetToolButtonStyle(参数2)设定button文本和图标显示的样式
QRadioButtonsetChecked(True)单选按钮设为选中状态
QCheckBoxsetChecked(True)将复选框设为选中或无选中状态
QCheckBoxsetCheckState(Qt.Checked)选中状态Qt.Checked, 无选中状态Qt.Unchecked和半选中状态Qt.PartiallyChecked
QCheckBoxsetTristate(True)让一个复选框拥有三种状态
QCheckBoxsetCheckState(Qt.PartiallyChecked)让一个复选框拥有三种状态
QCheckBoxcheckState()获取当前复选框的状态,返回值为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) 

控件方法

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

5、单行文本框

实例化控件

self.lineedit = QLineEdit(self)

控件方法

控件类型方法描述
QLineEditsetFont(combobox.currentFont())设置字体
QLineEditsetPlaceholderText()设置文本框显示文字
QLineEditsetMaxLength()设置文本框所允许输入的最大字符数
QLineEditsetReadOnly()设置文本为只读
QLineEditsetText()设置文本框的内容
QLineEdittext()返回文本框的内容
QLineEditsetDragEnable()设置文本框是否接受拖动
QLineEditselectAll()全选
QLineEditsetFocus()得到焦点
QLineEditsetAlignment(参数1)按固定值方式对齐文本
QLineEditsetEchoMode(参数2)设置文本框的显示格式
QLineEditsetValidator(参数3)设置文本框的验证器(验证规则),将限制任意可能输入的文本
QLineEditsetInputMask(参数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;#许可证号,空白字符是‘_’,所有字母都转换为大写

设置信号

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

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)

设置信号

控件类型信号描述
QComboBoxcurrentIndexChanged序号发生变化
QComboBoxcurrentTextChanged文本发生变化
QSpinBoxvalueChanged数字发生变化

控件方法

控件类型方法描述
QComboBoxsetCurrentIndex(2)设置默认值选项
QComboBoxaddItem(self.choice)添加一个选项
QComboBoxaddItems(self.choice_list)添加多个选项
QComboBoxcurrentIndex()获取当前文本序号
QComboBoxcurrentText()获取当前文本
QComboBoxcurrentFont()获取当前字体
QDoubleSpinBoxsetDecimals(int)设置小数位数
QSpinBoxsetRange(-99, 99)设置范围
QSpinBoxsetSingleStep(1)设置步长,即每次点击递增或递减多少值
QSpinBoxsetValue(66)设置初始显示值
QSpinBoxvalue()获取值
QSpinBoxsetValue(value)设置调节框的值

7、滑动条和旋钮

实例化控件

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

设置信号

控件类型信号描述
QSlidervalueChanged数值发生改变
QDialvalueChanged改变表盘数值

控件方法

控件类型方法描述
QSlidersetRange(0, 100)设置滑动条的范围
QSlidersetMinimum(0)设置最小值
QSlidersetMaximum(100)设置最大值
QSlidervalue()获取值
QSlidersetValue(value)设置值
QDialsetFixedSize(100, 100)固定旋钮的大小
QDialsetRange(0, 100)设置表盘数值范围
QDialsetMinimum(0)设置最小值
QDialsetMaximum(100)设置最大值
QDialsetNotchesVisible(True)显示刻度

8、定时器和进度条

实例化控件

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

设置信号

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

控件方法

控件类型方法描述
QTimerisActive()判断定时器是否处于激活状态
QTimerstart(100)启动计时器持续100毫秒
QTimerstop()停止计时器
QTimersetSingleShot(True)触发timeout信号后只调用一次update_func()
QProgressBarsetMinimum(0)设置最小值
QProgressBarsetMaximum(100)设置最大值
QProgressBarsetRange(0, 100)设置范围
QProgressBarsetValue(value)设置进度条当前值
QProgressBarreset()重置进度条的值

9、数字显示屏

实例化控件

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

控件方法

控件类型方法描述
QLCDNumbersetDigitCount(10)设置显示多少位数字
QLCDNumberdisplay(1234567890)显示数字
QLCDNumbersetSegmentStyle(参数1)设置显示屏数字样式
QLCDNumbersetSmallDecimalPoint(True)设置小数点的显示方式,若为True,则占位,若为False,则会单独占位
QLCDNumberdisplay(0.123456789)显示数字
QLCDNumberdisplay(‘HELLO’)显示字母
QLCDNumbersetMode(参数2)更改数字显示方式
参数1描述
QLCDNumber.Outline0让内容浮显,其颜色同显示屏背景颜色相同
QLCDNumber.Filled1让内容浮显,颜色同窗口标题颜色相同
QLCDNumber.Flat2让内容扁平化显示,颜色同窗口标题颜色相同
参数2描述
QLCDNumber.Hex0十六进制
QLCDNumber.Dec1十进制
QLCDNumber.Oct2八进制
QLCDNumber.Bin3二进制

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') 
  • 8
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值