基于QT的UI设计

Qt,Pyside6学习资料,够全够细致,欢迎学习交流

0 学习资料

Python Qt 图形界面编程 - PySide2 PyQt5 PyQt PySide_哔哩哔哩_bilibili

界面设计和布局 - 白月黑羽 (byhy.net)

基于QT的开发流程

在这里插入图片描述

QT的学习思路

1 以一个例子开始

1.1 UI界面代码

from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton,  QPlainTextEdit,QMessageBox

def handleCalc():
    info = textEdit.toPlainText()
    print(info)
    print(type(info))
    # 薪资20000 以上 和 以下 的人员名单
    salary_above_20k = ''
    salary_below_20k = ''
    for line in info.splitlines():
        if not line.strip():
            continue
        parts = line.split(' ')
        # 去掉列表中的空字符串内容
        parts = [p for p in parts if p]
        name,salary,age = parts
        if int(salary) >= 20000:
            salary_above_20k += name + '\n'
        else:
            salary_below_20k += name + '\n'

    QMessageBox.about(window,
                '统计结果',
                f'''薪资20000 以上的有:\n{salary_above_20k}
                \n薪资20000 以下的有:\n{salary_below_20k}'''
                )

app = QApplication([])

window = QMainWindow()
window.resize(500, 400)
window.move(300, 300)
window.setWindowTitle('薪资统计')

textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)

button = QPushButton('统计', window)
button.move(380,80)
button.clicked.connect(handleCalc)

window.show()

app.exec_()

(1)app = QApplication([])

QApplication 提供了整个图形界面程序的底层管理功能,比如:初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,等等…

小结:既然QApplication要做如此重要的初始化操作,所以,我们必须在任何界面控件对象创建前,先创建它。

实例对象=类+(初始化参数)实例化操作

(2)控件的使用

window = QMainWindow()

实例化出来一个主窗口界面

window.resize(500, 400)

修改window的大小

window.move(300, 310)

运行时候窗口的初始位置,有父组件的话(300,310)位置是相较于父控件的,没有父控件的话相对于显示器

window.setWindowTitle('薪资统计')

设置window主窗口的标题

textEdit = QPlainTextEdit(window)

实例化一个文本编辑控件,其是window主窗口父控件下的一个子控件

textEdit.setPlaceholderText("请输入薪资表")

修改此文本编辑控件实例对象的标题

button = QPushButton('统计', window)

实例化一个button按钮控件对象,其是其是window主窗口父控件下的一个子控件

若是把window改成textEdit会怎么样?

**小结:**对于控件的使用

大体思路是 实例化一个控件对象出来,明确控件之间的父子关系,修改控件对象的相关属性

(3).show()方法,展示窗口

实例化对象.show()

将此控件(包含此控件下的子控件),一般为主窗口或窗口

(4).exec_( )方法

一定要有,并且此对象是QMainWindow()类中实例化出来的对象

1.2 界面动作处理 (signal 和 slot)

刚才代码中只有UI并没有实际功能

怎么实现我想要的功能呢?

怎么实现我触发UI界面的控件就对应我想执行的操作呢?即信号和操作关联?

实现我想要的功能

def handleCalc():
    print('统计按钮被点击了')
def handleCalc():
    info = textEdit.toPlainText()

    # 薪资20000 以上 和 以下 的人员名单
    salary_above_20k = ''
    salary_below_20k = ''
    for line in info.splitlines():
        if not line.strip():
            continue
        parts = line.split(' ')
        # 去掉列表中的空字符串内容
        parts = [p for p in parts if p]
        name,salary,age = parts
        if int(salary) >= 20000:
            salary_above_20k += name + '\n'
        else:
            salary_below_20k += name + '\n'

    QMessageBox.about(window,
                '统计结果',
                f'''薪资20000 以上的有:\n{salary_above_20k}
                \n薪资20000 以下的有:\n{salary_below_20k}'''
                )

信号和操作关联

button.clicked.connect(handleCalc)

1.3 常见的需求

(1) 我们想用一些操作例如鼠标点击某个按钮,键盘输入某个指令,从而触发相应的操作。

例如我想通过点击统计,然后执行我们代码中的其他功能函数。我们需要做两部,第一将二者关联起来,第二点击统计后发出一个信号能通知电脑,我要你执行那一段代码

所以也需要将UI界面和相应的功能函数分隔开。

(2)我们想获取用户的一些内容,怎么才能获取呢?

(3)我们想将程序的某些运行结果,在UI上展示,该怎么展示呢?

具体点的需求

(1)如何将点击button的信号和操作关联起来呢?
button.clicked.connect(arg)

arg参数填写需要执行的功能参数

(2)如何获取用户输入的文本信息

textEdit.toPlainText()

返回一个字符串类型来存储用户输入的文本信息

(3)如何将操作的运行结果展示在UI上,展示在一个窗口的某一部分,展示在一个新的窗口

展示的内容:文本内容,图片,视频,语音?

展示的位置:?

总结:给一个软件搭建UI的整理思路

0、分析需求

1、绘制出UI界面

2、实现想要进行的操作

3、将UI界面的控件和操作关联起来

1.4 将一个界面封装到一个类中

上面的代码把控件对应的变量名全部作为全局变量。

如果要设计稍微复杂一些的程序,就会出现太多的控件对应的变量名。

而且这样也不利于 代码的模块化。

所以,我们通常应该把 一个窗口和其包含的控件,对应的代码 全部封装到类中,如下所示

from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton,  QPlainTextEdit,QMessageBox

class Stats:
    
    # 初始化方法
    
    def __init__(self):
        self.window = QMainWindow()
        self.window.resize(500, 400)
        self.window.move(300, 300)
        self.window.setWindowTitle('薪资统计')

        self.textEdit = QPlainTextEdit(self.window)
        self.textEdit.setPlaceholderText("请输入薪资表")
        self.textEdit.move(10, 25)
        self.textEdit.resize(300, 350)

        self.button = QPushButton('统计', self.window)
        self.button.move(380, 80)

        self.button.clicked.connect(self.handleCalc)

	# 操作函数
    
    def handleCalc(self):
        info = self.textEdit.toPlainText()

        # 薪资20000 以上 和 以下 的人员名单
        salary_above_20k = ''
        salary_below_20k = ''
        for line in info.splitlines():
            if not line.strip():
                continue
            parts = line.split(' ')
            # 去掉列表中的空字符串内容
            parts = [p for p in parts if p]
            name,salary,age = parts
            if int(salary) >= 20000:
                salary_above_20k += name + '\n'
            else:
                salary_below_20k += name + '\n'

        QMessageBox.about(self.window,
                    '统计结果',
                    f'''薪资20000 以上的有:\n{salary_above_20k}
                    \n薪资20000 以下的有:\n{salary_below_20k}'''
                    )

app = QApplication([])

stats = Stats()

stats.window.show()

app.exec_()

一个界面一个类,封装到类中很有必要

2 界面设计和布局QT designer

2.1 如何找到QT designer.exe文件

2.2 控件栏

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 应用QT desinger初步设计UI

1、如何给widget设置背景

QT设置widget背景图片,不影响widget内其他控件背景的方法_qt添加背景图片不覆盖其他控件,放在后面-CSDN博客

类名 # 控件名
{
填充方式:图片路径
}
 
例如:
QWidget#Widget
{
    border-image: url(:/resource/bg2.png);
}
或者
QFrmae#frame
{
    border-image: url(:/resource/bg2.png);
}

2、如何更改添加控件的实例化对象名

3、如何更改添加控件的属性

3 动态加载UI文件

问题1:我用QTdesinger设计好了.ui文件我该如何转换到python呢?

**方法一:**通过脚本或者自带的指令将设计好的.ui文件转化为.py文件

转换指令:

pyside6-uic main.ui > ui_main.py
pyside6-uic main.ui > ui_main.py
pyuic5 main.ui > ui_main.py

pyside6-uic blood_3.ui > blood_3.py

应用实例:

from PySide2.QtWidgets import QApplication,QMainWindow
from ui_main import Ui_MainWindow

# 注意 这里选择的父类 要和你UI文件窗体一样的类型
# 主窗口是 QMainWindow, 表单是 QWidget, 对话框是 QDialog
class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        # 使用ui文件导入定义界面类
        self.ui = Ui_MainWindow()
        # 初始化界面
        self.ui.setupUi(self)

        # 使用界面定义的控件,也是从ui里面访问
        self.ui.webview.load('http://www.baidu.com')

app = QApplication([])
mainw = MainWindow()
mainw.show()
app.exec_()

**方法二:**通过QUiLoader().load(.ui文件)方法加载一个ui文件到.py中

注意:

注意:里面的控件对象也成为窗口对象的属性了

    # 比如 self.ui.button , self.ui.textEdit
    #不再是 
    # setting_button = QPushButton('name', window)
    # setting_button.clicked.connected(function)

具体代码

from PySide2.QtUiTools import QUiLoader
class mainwindow:

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load('main.ui')
        self.ui.(button实例化对象名).clicked.connect(self.handleFunction)
	def handleFunction(self):
        print("helloworld")
        					     

示例代码

from PySide2.QtWidgets import QApplication, QMessageBox
# TO DO
from PySide2.QtUiTools import QUiLoader

class Stats:

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        # TO DO
        self.ui = QUiLoader().load('main.ui')

        self.ui.button.clicked.connect(self.handleCalc)

    def handleCalc(self):
        info = self.ui.textEdit.toPlainText()

        salary_above_20k = ''
        salary_below_20k = ''
        for line in info.splitlines():
            if not line.strip():
                continue
            parts = line.split(' ')

            parts = [p for p in parts if p]
            name,salary,age = parts
            if int(salary) >= 20000:
                salary_above_20k += name + '\n'
            else:
                salary_below_20k += name + '\n'

        QMessageBox.about(self.ui,
                    '统计结果',
                    f'''薪资20000 以上的有:\n{salary_above_20k}
                    \n薪资20000 以下的有:\n{salary_below_20k}'''
                    )

app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()

问题2:在开发过程中,可能会不断的调整ui布局的话,需要动态加载ui文件

则推荐使用方法二

4 界面布局layout

目的:随着主窗口的缩放,界面里面的控件,控件之间的距离也相应的进行缩放

最好的步骤:先用layout布局好后,在进行控件的添加

但是也可以:添加好控件后,也可以再用layout进行布局

思路:分模块的想这一组控件该是什么控件

步骤:右键鼠标,方框选中,然后点击布局,选择想要的布局,调整大小

其中输入框会自动扩展,下拉选择按钮,按钮都不会自动扩展

如何多选控件,按住crtl + 右键

QTdesinger中

Vertical layout 垂直布局 控件按行排放

horizontal layout 水平布局 控件按列排放

Grid layout 表格布局

Form layout 列表布局

5 调整控件的大小

1、在没有layout布局下调整控件的大小

修改控件的geometry(几何学)属性

geometry属性

​ X 控件x轴初始位置 相较于其父窗口位置

​ Y 控件y轴初始位置 相较于其父窗口位置

​ width 初始设置的宽度

​ height 初始设置的高度

2、在layout布局下调整控件的大小

Q1:当将一个控件进行layout布局后就无法修改geometry属性?如何调整layout布局下控件的大小?

ans1:修改控件的sizePolicy属性和minimumSize,maximumSize属性

建议将minimumSize和geometry中宽度和高度设置相同

以保证在layout布局后,设置好控件的大小保持为layout布局前的宽度和高度

sizePolicy属性

Qt SizePolicy 属性-CSDN博客

sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)

​ Preferred:默认值,控件的sizeHint是它的sizeHint,但是可以放大或者缩小

​ Ignored:

​ Expending:控件可以自行增大或者缩小

​ Fixed:控件不能放大或者缩小,控件的大小(geometry属性中的大小)就是它的sizeHint。

​ Minimum:控件的sizeHint(minimumSize属性)为控件的最小尺寸。控件不能小于这个sizeHint,但是可以放大。

​ Maximum:控件的sizeHint为控件(maximumSize属性)的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。

minimumSize属性

​ width

​ height

maximumSize属性

​ width

​ height

Q2:如果说一个layout布局中有若干个控件,有些控件想占用的大一些,有些控件我只想让它小一点该如何做?

ans2 :调整layout布局中layoutStetch属性

layoutStretch属性

调整一个布局下的空间的比例大小,缩放比例

3、总结

设定控件大小最简单高效的方法

设置好geometry属性中的宽高,然后设置好minimumSize中的宽高和maximumSize中的宽高(可选)然后根据具体效果,调整SizePolicy和layoutStretch

最根本的方法

合理运用Qwidget中的geometry、sizePolicy、minimumSize、maximumSize和layout布局中的layoutStetch属性

4、实战练习

设置好两个label,一个用于展示原图像,一个用于展示处理检测后的图像,合理设置两个label的大小。

6 调整控件的位置

本节问题

在使用layout实现自动缩放后,有些控件的位置和大小不符合预期效果

如何调整layout中控件的大小比例?

优先使用layout的layoutStrentch属性来控制,来控制每个控件的大小比例

如何在layout布局下调整某个控件的大小?

决定控件缩放的属性:sizePolicy,可以调整大小的策略

调整某控件sizePolicy属性,需要父窗口有布局的情况下

如何让一个button实现能够自动缩放,所以调节sizePolicy属性为ignored

如何layout布局下某控件的位置呢?只有一个控件如何布局layout?

托进入一个layout,然后将所需要的控件,拖入有段对象查看器中的布局

如何在layout布局下调整控件的间距呢?

要调整控件上下间距,可以给控件添加layout,然后通过设定layout的上下的padding 和 margin 来调整间距

要调整控件的左右间距,可以通过添加 horizontal spacer 进行控制,也可以通过layout的左右margin

如果想让一个layout布局下的几个控件之间保持一定的间距使用

vertical spcer,horizontal spcer

7 关于layout的布局经验

8 设计好ui文件后如何在python中运行

方法一:转化好的py文件作为模块调用

使用指令将ui文件转化为py文件,然后将转化好的py文件作为模块调用

第一步:转化

转化指令
# pyside6指令
pyside6-uic main.ui > ui_main.py
# pyside2指令
pyside2-uic main.ui > ui_main.py
# pyqt5指令
pyuic5 main.ui > ui_main.py

pyside6-uic blood_4 > blood_4.py
注意事项

1、需要在anconda有peside2/6,pyqt5环境下

2、需要切换到设计的ui盘符下

第二步:调用

示例代码
from PySide2.QtWidgets import QApplication,QMainWindow
from ui_main import Ui_MainWindow

# 注意 这里选择的父类 要和你UI文件窗体一样的类型
# 主窗口是 QMainWindow, 表单是 QWidget, 对话框是 QDialog
class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        # 使用ui文件导入定义界面类
        self.ui = Ui_MainWindow()
        # 初始化界面
        self.ui.setupUi(self)

        # 使用界面定义的控件,也是从ui里面访问
        self.ui.webview.load('http://www.baidu.com')

app = QApplication([])
mainw = MainWindow()
mainw.show()
app.exec_()
注意

1、注意 这里选择的父类 要和你UI文件窗体一样的类型主窗口是 QMainWindow, 表单是 QWidget, 对话框是 QDialog

2、某个空间的调用

第三步:将qrc文件也转化为ui文件

若设计的ui中使用了qrc资源文件

在这里插入图片描述

转化指令
# pyside6将qrc文件转化为ui文件指令
pyside6-rcc resources.qrc -o resources_rc.py
# pyside2将qrc文件转化为ui文件指令
pyside2-rcc resources.qrc -o resources_rc.py
# pyqt5将qrc文件转化为ui文件指令
pyrcc5 resource.qrc -o resource_rc.py
注意事项

1、一定要把qrc文件转化为py文件否则会报错

ModuleNotFoundError: No module named 'resources_rc'

[PyQt5资源文件错误_modulenotfounderror: no module named 'resource-CSDN博客](https://blog.csdn.net/qq_39828850/article/details/115770888?ops_request_misc=&request_id=&biz_id=102&utm_term=为什么将ui文件转化为py文件后import resourc&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-115770888.142v99pc_search_result_base3&spm=1018.2226.3001.4187)

2、一定要确保在qrc所在盘符且拼写正确否则会报错

D:\Users\Administrator\anaconda3\envs\yolov8s\Lib\site-packages\PySide6\rcc: File does not exist 'resource.qrc' 'D:\Users\Administrator\anaconda3\envs\yolov8s\Lib\site-packages\PySide6\rcc -g python resource.qrc -o resource_rc.py' returned 1

这个错误提示表明指定的文件 resource.qrc 不存在。请确保在运行 pyside6-rcc 命令之前,你已经切换到包含 resource.qrc 文件的正确目录。另外,也确保文件名的拼写是正确的。检查一下文件路径和文件名,然后再试一次。

方法二:用Qloder类加载ui文件

示例代码

# 使用QUiLoder类来加载一个UI文件

from PySide6.QtWidgets import QApplication, QMessageBox
# TODO
from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
from PySide6.QtWidgets import QWidget

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        # 加载UI文件
        ui_file = QFile("blood_3.ui")
        ui_file.open(QFile.ReadOnly)
        self.ui = loader.load(ui_file, self)
        ui_file.close()

if __name__ == '__main__':
    loader = QUiLoader()
    app = QApplication([])
    widget = MyWidget()
    widget.show()
    app.exec_()

注意事项

1、运行后不报错也没有反应?

参考:PySide6 QUiLoader 不显示窗口_pyside6使用quiloader-CSDN博客

一定要在实例化QApplication([])类之前QUiLoader()

即先后顺序QUiLoader()再QApplication([])类

2、用QUiLoder类加载ui不显示qrc文件中的图标?

3、注意调用控件形式

从文件中加载UI定义

    # 从 UI 定义中动态 创建一个相应的窗口对象
    # 注意:里面的控件对象也成为窗口对象的属性了
    # 比如 self.ui.button , self.ui.textEdit

9 Qt 资源系统和qrc文件使用

pyside6(1):Qt 资源系统和qrc文件使用_qt qrc-CSDN博客

PySide入门实战之四 | 手把手教你qrc资源文件的使用_pyside6图片如何转换成qrc-CSDN博客

10 QSS样式表使用

1、QSS概述

(1)QSS全称

Qt style sheet

(2)QSS语法组成

是由 selector 和 declaration 组成 选择和描述

例如:

QPushButton { 
    color: red ;
    font-size:15px;
}

花括号前面的 部分,比如示例中的 QPushButton 称之为 selector。

花括号后面的 部分,比如示例中的

{ 
    color: red ;
    font-size:15px;
}

称之为 Properties (样式属性)

2、selector选择器

(1)slector 常见语法

在这里插入图片描述

(2)Pseudo-States 伪状态

只有满足一定条件时候,触发某些操作的时候,才会显示样式表的属性

我们可以这样指定当鼠标移动到一个元素上方的时候,元素的显示样式

QPushButton:hover { color: red }

再比如,指定一个元素是disable状态的显示样式

QPushButton:disabled { color: red }

再比如,指定一个元素是鼠标悬浮,并且处于勾选(checked)状态的显示样式

QCheckBox:hover:checked { color: white }

(3) 优先级

近邻原则;如果一个元素的显示样式被多层指定了, 越靠近元素本身 的选择指定,优先级越高

例如 我在mainWindow父类中修改样式表

QPushButton { 
    color: red ;
    font-size:15px;
}

但是我又选择了Button1 修改样式表

color:blue;
font-size:16px

则最终Button1的样式为最近的

3、样式属性

QSS样式官方文档

Qt Style Sheets Reference | Qt Widgets 5.15.16

# 背景
background-image:;
background-repeat:;
background-position:;
background-color:;

# 边框
border:线宽,样式,颜色;
border:1px solid #1d649c;
border:None;
	# 样式有
	solid 实线
	dashed 虚线
	dotted 点

# 字体
font: 700 28pt "Microsoft YaHei UI";

# 宽度和高度
QPushButton{   
    width:50px;
    height:20px;
}

# magin、padding

QTextEdit {
    margin:10px 11px 12px 13px
}

分别指定了元素的上右下左margin。
也可以使用 margin-top, margin-right, margin-bottom, margin-left 单独指定 元素的上右下左margin

4、如何在Qt desinger中的使用样式表

方式一:右键选择想要改变样式的某个控件,点击添加样式表,然后直接添加属性就行

优点:简单明了

缺点:繁琐

background-image:;
background-repeat:;
background-position:;
background-color:;

border:;

font: 700 28pt "Microsoft YaHei UI";

方法二:若某些控件的样式基本一致不想一个个修改?

那就服从语法语法规范,使用selector

需要注意的是,选择某父类添加样式表,如果不选择具体的实例对象,只选择某一类的样式,则该父类中存在的所有子类控件都会修改样式

例如 选择mainWindow窗口修改style sheet

QPushButton { 
    color: red ;
    font-size:15px;
}

则会将mainWindow窗口下所有QPushButton控件均修改为一个样式

若只想改变其中之一的QPushButton控件控件需要添加这个对象的实例名

QPushButton #button1 { 
    color: red ;
    font-size:15px;
}

5、常用的样式表QSS

(1)修改一个button控件的样式(指定图标,背景透明,无重复,无边框)

background-image: url(:/leftbox/images/newsize/menu.png);
background-repeat: no-repeat;
background-position: center;
background-color: transparent;
border: none;

(2)为主界面mainWindow,mainWidget添加一个好看的背景

# 添加背景图片
background-image: url(:/leftbox/images/newsize/background.png);
# 背景是否重复
background-repeat: no-repeat;
# 背景的位置
background-position: center;
# 背景的颜色
background-color: transparent;

(3)用一个label展示一个图标

background-image: url(:/setting /images/newsize/IOU.png);
background-repeat: no-repeat;
background-position: center;

(4)为一个label设一个好看的字体

可以直接在qtdesinger中改变样式表,添加字体

字体的样式可以在https://fontmeme.com/zh/shibie/中选择好看的字体

font: 700 28pt "Microsoft YaHei UI";

(5)实战案例

11 发布程序

使用pyinstaller,将py文件打包为可执行文件.exe

0 、参考资源

制作成可执行文件 - 白月黑羽 (byhy.net)

隐藏py文件 - 白月黑羽 (byhy.net)

发布程序 - 白月黑羽 (byhy.net)

1、使用

在使用pyinstaller进行打包时候,只需要将主程序进行pyinstaller,主程序import的其他模块(功能函数模块)会自动进行打包

打包好后会生成两个文件夹

dist文件夹:

build文件夹:

打包好后只需要将dist文件夹下,你的项目文件压缩,然后发送给别人就行啦

2、注意

但是不能将某些动态调用的资源打包进入,比如:图片,excel,ui,qrc,qss文件,但是凡是import 导入的py文件都是可以自动打包进入的

什么叫做动态导入?动态资源呢?

就是在写代码的时候并不知道要导入,不是用 import语句,而是用 __import__ 或者 execeval 这样的方式,来导入库。而是在运行的时候才知道的

——所以推荐优先使用将ui文件转化为py文件的方式加载ui界面

优势:

因为已经对于ui文件,qrc文件,qss文件进行转化为py文件,作为子模块进行调用所以无需要单独进行 添加资源文件的步骤

——若是采用QUiLoder类动态加载ui还需要将我们的示例代码 需要 从 httpclient.ui 中加载界面,手动拷贝到 dist/httpclient 目录中。然后,再双击运行 httpclient.exe

所以在执行前还需要将一些其他动态资源复制到dist文件中

3、常用的指令

pyinstaller httpclient.py --noconsole --hidden-import PySide2.QtXml

这样就会在当前目录下产生一个名为 dist 的目录。里面就有一个名为 httpclient 的目录,我们的可执行程序 httpclient.exe 就在里面。

--noconsole 指定不要命令行窗口,否则我们的程序运行的时候,还会多一个黑窗口。

在打包时,可能会出现一些错误如何查看呢?

但是我建议大家可以先去掉这个参数,等确定运行成功后,再加上参数重新制作exe。因为这个黑窗口可以显示出程序的报错,这样我们容易找到问题的线索。

--hidden-import PySide2.QtXml 参数是因为这个 QtXml库是动态导入,PyInstaller没法分析出来,需要我们告诉它,

4、如何隐藏py文件?

(1)转化为pyc文件

(2)转化为c语言,甚至汇编语言

5、 程序图标

(1)主窗口图标

from PySide2.QtGui import  QIcon

app = QApplication([])
# 加载 icon
app.setWindowIcon(QIcon('logo.png'))

**注意:**这些图标png文件,在使用PyInstaller创建可执行程序时,也要拷贝到程序所在目录。否则可执行程序运行后不会显示图标。

(2)应用程序图标可执行文件图标

可以在PyInstaller创建可执行程序时,通过参数 --icon="logo.ico" 指定

比如

pyinstaller httpclient.py --noconsole --hidden-import PySide2.QtXml --icon="logo.ico"

**注意:**参数需要时ico文件,不能是png,jpg格式

将将png转化为ico文件网址:PNG to ICO - Convert your PNG to ICO for Free Online (zamzar.com)

12 常用控件的学习

0、参考资源

前言_哔哩哔哩_bilibili

常用控件1 - 白月黑羽 (byhy.net)

# 问题

1、qrc文件

什么是qr文件,其有何作用,如何生成qrc文件,如何加载使用qrc文件,如何将qrc文件转化为py文件

2、qss文件

什么是qss文件,如何编写qss,增强qss编程体验的插件,如何加载使用qss文件

3、ui文件

什么是UI文件,如何在py文件中加载ui文件,动态显示ui文件时编写的注意事项,如何将ui文件转化为py文件

4、深入理解布局

5、如何将别人创建的qt 模板二次进行开发?

color: rgba(0, 0, 0, 0.44);

text-align:center;

font: 700 italic 16pt “Segoe UI”;

调色版:调色板 | 微调和查看颜色代码 - Tophix

字体网站:字体识别 (fontmeme.com)

调整图片尺寸:在线调整图片尺寸 (fontmeme.com)

将png转化为ico文件网址:PNG to ICO - Convert your PNG to ICO for Free Online (zamzar.com)

–hidden-import PySide2.QtXml --icon=“logo.ico”


**注意:**参数需要时ico文件,不能是png,jpg格式

将将png转化为ico文件网址:[PNG to ICO - Convert your PNG to ICO for Free Online (zamzar.com)](https://www.zamzar.com/convert/png-to-ico/)

# 12 常用控件的学习

## 0、参考资源

[前言_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Zf4y1W79o/?p=1&vd_source=932cdfd8fd1977c3d2e37fc2ea706b1f)

[常用控件1 - 白月黑羽 (byhy.net)](https://www.byhy.net/py/qt/qt_05_1/)

# # 问题

1、qrc文件

什么是qr文件,其有何作用,如何生成qrc文件,如何加载使用qrc文件,如**何将qrc文件转化为py文件**

2、qss文件

什么是qss文件,如何编写qss,增强qss编程体验的插件,如何加载使用qss文件

3、ui文件

什么是UI文件,如何在py文件中加载ui文件,动态显示ui文件时编写的注意事项,如何将ui文件转化为py文件

4、深入理解布局

5、如何将别人创建的qt 模板二次进行开发?





color: rgba(0, 0, 0, 0.44); 

text-align:center;

font: 700 italic 16pt "Segoe UI";



调色版:[调色板 | 微调和查看颜色代码 - Tophix](https://tophix.com/zh-cn/color/color-palette)

字体网站:[字体识别 (fontmeme.com)](https://fontmeme.com/zh/shibie/)

调整图片尺寸:[在线调整图片尺寸 (fontmeme.com)](https://fontmeme.com/zh/resize-images/)

将png转化为ico文件网址:[PNG to ICO - Convert your PNG to ICO for Free Online (zamzar.com)](https://www.zamzar.com/convert/png-to-ico/)



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值