我想執行一個使用 PyQt5 用 python 編寫的程序,然后遷移到 MacOS Catalina 下的 PySide2。使用 PyQt5 它執行得很好。我已經像 PyQt5 一樣安裝了 PySide2:python3 -m pip install PyQt5python3 -m pip install PySide2macOS 隨后重新啟動?,F在,安裝了 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
提交
取消