使用Qt开发UI,有一个工具是绕不开的,那就是QtDesigner。对于使用Python开发来说,我们需要把QtDesigner生产的.ui文件,转成对应的.py文件,才可以正常使用。(其实也有另一种方法是直接读取.ui文件,但这种方法的缺点是编程时没有代码补全。)如果涉及到资源文件.qrc,同样也需要转换成.py文件。

因此我们需要配置3个外部工具,分别是

  1. QtDesigner 用来编辑.ui文件
  2. UIC.ui文件转换为'py文件
  3. RCC.qrc文件转换为.py文件

省流版

新增外部工具

打开(或新建)一个工程,点文件->设置,打开设置界面,找到工具->外部工具,点+即可新增外部工具。按照以下图示创建3个外部工具。

新建外部工具

QtDesigner

QtDesigner

  • 程序路径

    C:\Users\username\AppData\Local\Programs\Python\Python310\Lib\site-packages\PySide6\designer.exe

    其中username为用户名,Python310为对应的Python版本,PySide6为对应的PySide或PyQt版本。此外,以上路径为Python的默认安装路径,如果你不是安装在默认路径,需要按实际情况修改。下同不复赘述。

  • 实参

    $FileName$
  • 工作目录

    $FileDir$

UIC

UIC

  • 程序路径

    C:\Users\username\AppData\Local\Programs\Python\Python310\Scripts\pyside6-uic.exe

    其中pyside6-uicpyside6为对应的PySide或PyQt版本,下同不复赘述。

  • 实参

    $FileName$ -o ui_$FileNameWithoutExtension$.py
  • 工作目录

    $FileDir$

RCC

RCC

  • 程序路径

    C:\Users\username\AppData\Local\Programs\Python\Python310\Scripts\pyside6-rcc.exe
  • 实参

    -o $FileNameWithoutExtension$_rc.py $FileName$
  • 工作目录

    $FileDir$

使用

QtDesigner

目前在PyCharm中无法直接新建.ui文件,只能手动打开QtDesigner新建.ui文件。
QtDesigner的目录具体参看上文QtDesigner的程序路径。此程序以后会经常使用,建议建立一个快捷方式。

生成.ui文件后,在.ui文件上右键,外部工具->QtDesigner,即可使用QtDesigner编辑。

编辑.UI文件

UIC

外部工具->UIC,即可把.ui文件转成.py文件。如mainwindow.ui会转为ui_mainwindow.py

RCC

外部工具->RCC,即可把.rcc文件转成.py文件。如icon.qrc会转为icon_rc.py

多了解点

外部工具

  • 名称:这个本身并没有什么特别支出,可按需任意取名,但考虑到实际使用体验,建议把UICRCC改个名字,方便操作时一眼认出。
  • 组:默认为外部工具,个人认为这也是最方便使用的。网上很多教程会让你把这几个外部工具列入二级分组,比如Qt,从组织整理上说,这种作法是对的,但如果你的开放环境只有这几个外部工具,其实没必要这样做,这样做会新增一个二级菜单,增加额外的操作。
  • 描述:相当于注释,可留空。
  • 程序:即要调用的外部程序所在的路径。
  • 实参:传入程序的参数,具体详见每个外部工具。
  • 工作目录:在哪个文件夹下调用该外部工具,具体详见每个外部工具。
  • 其他高级选项:保存默认即可(因为我也不懂)。

QtDesigner

如果使用命令行(或终端)调用该工具,完整命令为

PS D:\MyProject> C:\Users\username\AppData\Local\Programs\Python\Python310\Lib\site-packages\PySide6\designer.exe .\mainwindow.ui

运行以后,就会打开D:\MyProject下的mainwindow.ui文件。

实参mainwindow.ui,即当前文件名,可使用宏$FileName$获取。

工作目录D:\MyProject,即文件所在目录,可使用宏$FileDir$获取。网上很多教程会让你在这里使用$ProjectFileDir$,级项目所在目录。如果你的.ui文件是存在项目的根目录下,是可以正常运行的,因为此时项目目录就是文件所在目录。但如果不是,比如存放在src目录下,就会出错。

类似的宏还有很多,如有要全部记下来显然不现实,点击旁边的+按钮,即可在众多的宏中选择所需的宏。

选择宏

UIC

完整命令为

PS D:\MyProject> pyside6-uic .\mainwindow.ui -o ui_mainwindow.py

默认情况下,系统会把Python的第三方库加入path路径,所以在调用pyside6-uic.exe时无须填写冗长的完整路径,此外在Windows下,.exe也可以省略。

实参.\mainwindow.ui -o ui_mainwindow.py

其中mainwindow.ui为输入文件名,可用宏$FileName$获取。

新生成的文件名为ui_mainwindow.py,即ui_不含扩展名的文件名.py,其中不含扩展名的文件名可用宏$FileNameWithoutExtension$获取。

因此最后使用宏表示为$FileName$ -o ui_$FileNameWithoutExtension$.py

工作目录与上文一致,不再赘述。

RCC

完整命令为

PS D:\MyProject> pyside6-rcc -o icon_rc.py .\icon.qrc

请注意,实参部分,先传入的输出文件名icon_rc.py,再传入输入文件名icon.qrc,其他部分与前文的UIC内容是一样的道理,不再赘述。

如果使用Qt Designer设计界面,生成的ui文件,可以使用以下命令转换成py文件。

pyside2-uic main.ui > main.py

但如果设计中涉及到资源文件(如自定义图片),生产的main.py中会有import icon_rc,提示找不到文件,原因是没有转换对应的资源文件。

可以使用以下命令将qrc资源文件转换为py文件。

pyside2-rcc -o icon_rc.py icon.qrc

摘自网络

打开一个空白的Excel表格,按Alt + F11打开VBA界面,在左侧空白处右键,选择插入模块,然后输入以下代码:

Function pinyin(p As String) As String
    i = Asc(p)
    Select Case i
    Case -20319 To -20284: pinyin = "A"
    Case -20283 To -19776: pinyin = "B"
    Case -19775 To -19219: pinyin = "C"
    Case -19218 To -18711: pinyin = "D"
    Case -18710 To -18527: pinyin = "E"
    Case -18526 To -18240: pinyin = "F"
    Case -18239 To -17923: pinyin = "G"
    Case -17922 To -17418: pinyin = "H"
    Case -17417 To -16475: pinyin = "J"
    Case -16474 To -16213: pinyin = "K"
    Case -16212 To -15641: pinyin = "L"
    Case -15640 To -15166: pinyin = "M"
    Case -15165 To -14923: pinyin = "N"
    Case -14922 To -14915: pinyin = "O"
    Case -14914 To -14631: pinyin = "P"
    Case -14630 To -14150: pinyin = "Q"
    Case -14149 To -14091: pinyin = "R"
    Case -14090 To -13319: pinyin = "S"
    Case -13318 To -12839: pinyin = "T"
    Case -12838 To -12557: pinyin = "W"
    Case -12556 To -11848: pinyin = "X"
    Case -11847 To -11056: pinyin = "Y"
    Case -11055 To -2050: pinyin = "Z"
    Case Else: pinyin = p
    End Select
End Function

Function getpy(str)
    For i = 1 To Len(str)
    getpy = getpy & pinyin(Mid(str, i, 1))
    Next i
End Function

在Excel中即可调用自定义函数getpy获得拼音缩写,如=getpy(A1)

1.安装Newtonsoft.JSON

在【解决方案资源管理器】中右键项目,选择【管理 NuGet 程序包】

image

在浏览页面中搜索并安装Newtonsoft.Json即可

image

2. 导入Newtonsoft.Json

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

3.示例

json如下

{
    "message": null,
    "data": {
        "paginationData": [
            {
                "name": "管理员",
                "user_id": 16394,
                "groupsname": ""
            },
            {
                "name": "测试",
                "user_id": 16395,
                "groupsname": "部门A"
            },
            {
                "name": "隔壁老王",
                "user_id": 16396,
                "groupsname": "部门A"
            },
            {
                "name": "小明",
                "user_id": 16397,
                "groupsname": "部门B"
            }
        ],
        "result": 1
    }
}

image

先创建一个对应的结构体

Public Structure Employee
    Dim name As String
    Dim user_id As Integer
    Dim groupsname As String
End Structure

读取并解析json

Dim rawStr As String = System.IO.File.ReadAllText("D:\test.json")           '读取json文件,可根据实际情况替换对应语句
Dim p As JObject = CType(JsonConvert.DeserializeObject(rawStr), JObject)    '用json文本创建对象

MsgBox(p("message".ToString))                                               '读取值

Dim emp As List(Of Employee)                                                                        '创建对应的结构体列表
emp = JsonConvert.DeserializeObject(Of List(Of Employee))(p("data")("paginationData").ToString)     '如果有多层结构,可以继续添加p的子孙项
Dim empCount As Integer = emp.Count     '全部职员数量
MsgBox(emp(2).name & emp(2).user_id & emp(2).groupsname)    '结果为“隔壁老王16396部门A”