我想执行一个使用 PyQt5 用 python 编写的程序,然后迁移到 MacOS Catalina 下的 PySide2。使用 PyQt5 它执行得很好。我已经像 PyQt5 一样安装了 PySide2:python3 -m pip install PyQt5python3 -m pip install PySide2macOS 随后重新启动。现在,安装了 PySide2 后,当我尝试加载 Ui 文件时,我在 macOS 中遇到错误。MRE 可在 Linux、Windows 和 macOS Catalina 下运行:#!/usr/bin/env python3# Standard library importsimport sys# Third party importsfrom PySide2.QtCore import (QMetaObject, Slot)from PySide2.QtWidgets import (QApplication, QWidget, QPushButton, QHBoxLayout, QMessageBox)def show_about(): msg = QMessageBox() msg.setText("About this app.") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): aboutButton = QPushButton("About") aboutButton.setObjectName("aboutButton") hbox = QHBoxLayout() hbox.addStretch(1) hbox.addWidget(aboutButton) self.setLayout(hbox) QMetaObject.connectSlotsByName(self) self.setWindowTitle('Buttons') @Slot() def on_aboutButton_clicked(self): show_about() def main(): app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_())if __name__ == '__main__': main()MRE 在 macOS Catalina 下失败,但在 Linux 和 Windows 中工作:#!/usr/bin/env python3# Standard library importsimport sys# Third party importsfrom PySide2.QtWidgets import (QApplication, QMainWindow)from PySide2.QtUiTools import loadUiType class MainWindow(QMainWindow, loadUiType("win_main.ui")[0]): def __init__(self): super().__init__() self.setupUi(self)Python 3.8.5 64位(从这里下载,没有HomeBrew等。
1 回答
SMILET
TA贡献1796条经验 获得超4个赞
不要使用相对路径,因为它们容易出错,因为它将取决于脚本的运行方式,而是构建绝对路径:
import os.path
CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
ui_file_path = os.path.join(CURRENT_DIR, "win_main.ui")
Ui_Class, _ = loadUiType(ui_file_path)
class MainWindow(QMainWindow, Ui_Class):
# ...
还要在文件顶部添加,因为似乎安装 python 时,未标记向环境变量添加必要路径的选项:
import PySide2
import os.path
uic_dir = os.path.dirname(PySide2.__file__)
os.environ["PATH"] += os.pathsep + uic_dir
添加回答
举报
0/150
提交
取消