📜  将 ui 转换为 py - Python (1)

📅  最后修改于: 2023-12-03 15:09:32.847000             🧑  作者: Mango

将 UI 转换为 Py - Python

在 Python 编程中,一个常见的任务就是把图形用户界面(GUI)设计师所创建的UI转换为 Python 代码。这样可以使程序员在 Python 中快速开发出可视化和交互式的应用程序。本文将介绍几种常见的将 UI 转换为 Py 的方法,包括以下几点:

  • PyQt5 Designer
  • PySide2 Designer
  • wxFormBuilder
PyQt5 Designer

PyQt5 Designer 是 PyQt5 的一个可视化的工具,它可以方便地创建 UI,并且将 UI 转化为 Python 代码。使用 PyQt5 Designer 可以大大提高 UI 开发效率。

以下是一个简单的例子,演示了如何在 PyQt5 Designer 中创建一个简单的计算器的 UI。

PyQt5 Designer

将上述 UI 设计好后,点击 File > Save As 将其保存为 calculator.ui 文件。

接下来,我们需要将 UI 文件转换为 Python 代码。可以使用以下命令:

pyuic5 -x calculator.ui -o calculator.py

以上命令将在当前目录下创建一个名为 calculator.py 的 Python 文件,其中包含了刚才设计好的 UI。此时,只需要在 Python 代码中导入转换后的 Python 模块即可。

import sys
from PyQt5 import QtWidgets, uic

class Calculator(QtWidgets.QMainWindow):
    def __init__(self):
        super(Calculator, self).__init__()
        uic.loadUi('calculator.ui', self)

        # Connect Buttons to Functions
        self.pushButton_0.clicked.connect(lambda: self.btnClick('0'))
        self.pushButton_1.clicked.connect(lambda: self.btnClick('1'))
        self.pushButton_2.clicked.connect(lambda: self.btnClick('2'))
        self.pushButton_3.clicked.connect(lambda: self.btnClick('3'))
        self.pushButton_4.clicked.connect(lambda: self.btnClick('4'))
        self.pushButton_5.clicked.connect(lambda: self.btnClick('5'))
        self.pushButton_6.clicked.connect(lambda: self.btnClick('6'))
        self.pushButton_7.clicked.connect(lambda: self.btnClick('7'))
        self.pushButton_8.clicked.connect(lambda: self.btnClick('8'))
        self.pushButton_9.clicked.connect(lambda: self.btnClick('9'))
        self.pushButton_add.clicked.connect(lambda: self.btnClick('+'))
        self.pushButton_subtract.clicked.connect(lambda: self.btnClick('-'))
        self.pushButton_divide.clicked.connect(lambda: self.btnClick('/'))
        self.pushButton_multiply.clicked.connect(lambda: self.btnClick('*'))
        self.pushButton_equals.clicked.connect(lambda: self.btnClick('='))
        self.pushButton_decimal.clicked.connect(lambda: self.btnClick('.'))
        self.pushButton_clear.clicked.connect(lambda: self.textEdit.clear())

    def btnClick(self, number):
        cursor = self.textEdit.textCursor()
        cursor.movePosition(cursor.End)
        cursor.insertText(number)

app = QtWidgets.QApplication(sys.argv)
window = Calculator()
window.show()
sys.exit(app.exec_())
PySide2 Designer

PySide2 Designer 是 PySide2 的一个可视化工具。与 PyQt5 Designer 类似,它可以快速创建 UI,同时将其转化为 Python 代码。

以下是一个简单的例子,演示了如何在 PySide2 Designer 中创建一个 UI。

PySide2 Designer

将上述 UI 设计好后,点击 File > Save As 将其保存为 calculator.ui 文件。

接下来,我们需要将 UI 文件转换为 Python 代码。可以使用以下命令:

pyside2-uic -x calculator.ui -o calculator.py

以上命令将在当前目录下创建一个名为 calculator.py 的 Python 文件,其中包含了刚才设计好的 UI。此时,只需要在 Python 代码中导入转换后的 Python 模块即可。

import sys
from PySide2 import QtWidgets, uic

class Calculator(QtWidgets.QMainWindow):
    def __init__(self):
        super(Calculator, self).__init__()
        uic.loadUi('calculator.ui', self)

        # Connect Buttons to Functions
        self.pushButton_0.clicked.connect(lambda: self.btnClick(0))
        self.pushButton_1.clicked.connect(lambda: self.btnClick(1))
        self.pushButton_2.clicked.connect(lambda: self.btnClick(2))
        self.pushButton_3.clicked.connect(lambda: self.btnClick(3))
        self.pushButton_4.clicked.connect(lambda: self.btnClick(4))
        self.pushButton_5.clicked.connect(lambda: self.btnClick(5))
        self.pushButton_6.clicked.connect(lambda: self.btnClick(6))
        self.pushButton_7.clicked.connect(lambda: self.btnClick(7))
        self.pushButton_8.clicked.connect(lambda: self.btnClick(8))
        self.pushButton_9.clicked.connect(lambda: self.btnClick(9))
        self.pushButton_add.clicked.connect(lambda: self.btnClick('+'))
        self.pushButton_subtract.clicked.connect(lambda: self.btnClick('-'))
        self.pushButton_divide.clicked.connect(lambda: self.btnClick('/'))
        self.pushButton_multiply.clicked.connect(lambda: self.btnClick('*'))
        self.pushButton_equals.clicked.connect(lambda: self.btnClick('='))
        self.pushButton_decimal.clicked.connect(lambda: self.btnClick('.'))
        self.pushButton_clear.clicked.connect(lambda: self.textEdit.clear())

    def btnClick(self, number):
        cursor = self.textEdit.textCursor()
        cursor.movePosition(cursor.End)
        cursor.insertText(str(number))

app = QtWidgets.QApplication(sys.argv)
window = Calculator()
window.show()
sys.exit(app.exec_())
wxFormBuilder

wxFormBuilder 是一个可视化 UI 创建工具,它支持许多 UI 框架,包括 wxWidgets,Qt 和 XRC 等。wxFormBuilder 可以将 UI 设计导出为 C++、Python 和 XRC 三种格式的代码。

以下是一个简单的例子,演示了如何在 wxFormBuilder 中创建一个 UI。

wxFormBuilder

将上述 UI 设计好后,点击 File > Save As 将其保存为 calculator.xrc 文件。

接下来,我们需要将 XRC 文件转换为 Python 代码。可以使用以下命令:

python -m wx.tools.xrced -p calculator.xrc -o calculator.py

以上命令将在当前目录下创建一个名为 calculator.py 的 Python 文件,其中包含了刚才设计好的 UI。此时,只需要在 Python 代码中导入转换后的 Python 模块即可。

import wx
import calculator

class CalculatorFrame(calculator.MyFrame1):
    def __init__(self, parent):
        calculator.MyFrame1.__init__(self, parent)

        # Connect Buttons to Functions
        self.button_0.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(0))
        self.button_1.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(1))
        self.button_2.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(2))
        self.button_3.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(3))
        self.button_4.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(4))
        self.button_5.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(5))
        self.button_6.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(6))
        self.button_7.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(7))
        self.button_8.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(8))
        self.button_9.Bind(wx.EVT_BUTTON, lambda event: self.btnClick(9))
        self.button_add.Bind(wx.EVT_BUTTON, lambda event: self.btnClick('+'))
        self.button_subtract.Bind(wx.EVT_BUTTON, lambda event: self.btnClick('-'))
        self.button_divide.Bind(wx.EVT_BUTTON, lambda event: self.btnClick('/'))
        self.button_multiply.Bind(wx.EVT_BUTTON, lambda event: self.btnClick('*'))
        self.button_equals.Bind(wx.EVT_BUTTON, lambda event: self.btnClick('='))
        self.button_decimal.Bind(wx.EVT_BUTTON, lambda event: self.btnClick('.'))
        self.button_clear.Bind(wx.EVT_BUTTON, lambda event: self.text_ctrl.Clear())

    def btnClick(self, number):
        self.text_ctrl.SetValue(self.text_ctrl.GetValue() + str(number))

app = wx.App()
frame = CalculatorFrame(None)
frame.Show(True)
app.MainLoop()
结论

本文介绍了三种将 UI 转换为 Python 代码的工具,PyQt5 Designer、PySide2 Designer 和 wxFormBuilder。每个工具都有其优缺点,有些工具的灵活性更高,有些工具的使用更加简单。根据具体需求和个人喜好,程序员可以选择相应的工具进行 UI 开发。