我使用 PyQt 已经有一段时间了,并且在我使用它的整个过程中,有一个非常一致的编程模式。
有没有办法在 PySide 中做类似的事情?我已经阅读了文档和示例,我能找到的最接近的东西是一个计算器示例,它将 .ui 文件预先渲染为 python 代码,这是在 PyQt 中执行此操作的超级旧方法(为什么将其烘焙为 python什么时候你可以解析 ui?)
我正在用 PySide 做这件事。 :)
你使用这个https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8(Sebastian Wiesner 的原创位于https://github.com/lunaryorn/snippets/blob/master/qt4/designer/pyside_dynamic.py 但已消失) - 它覆盖 PySide.QtUiTools.QUiLoader 并提供新的
loadUi()
方法,以便您可以执行此操作:
class MyMainWindow(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
loadUi('mainwindow.ui', self)
当您实例化 MyMainWindow 时,它将具有您使用 Qt Designer 设计的 UI。
如果您还需要使用自定义小部件(Qt Designer 中的“升级到”),请参阅此答案:https://stackoverflow.com/a/14877624/532513
将 ui_file = 'AOI_GUI.ui' 和 output_py_file = 'AOI_GUI.py' 更改为您的文件名。
from PySide6.QtCore import QFile, QTextStream
from PySide6.QtWidgets import QApplication
from PySide6.QtUiTools import QUiLoader
import sys
# Function to convert UI file to Python
def convert_ui_to_py(ui_file, output_py_file):
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
loader = QUiLoader()
ui_file = QFile(ui_file)
ui_file.open(QFile.ReadOnly)
ui_content = loader.load(ui_file)
ui_file.close()
# Convert QMainWindow object to string
ui_str = repr(ui_content)
with open(output_py_file, 'w') as py_file:
py_file.write(ui_str)
print(f"UI file '{ui_file.fileName()}' converted to Python file '{output_py_file}'")
# Entry point of the script
def main():
# Specify the path to the UI file and the desired output Python file
ui_file = 'AOI_GUI.ui'
output_py_file = 'AOI_GUI.py'
# Convert the UI file to Python
convert_ui_to_py(ui_file, output_py_file)
if __name__ == '__main__':
main()