为什么在 macOS Catalina 下的 PySide2 程序会出现错误:

我想执行一个使用 PyQt5 用 python 编写的程序,然后迁移到 MacOS Catalina 下的 PySide2。使用 PyQt5 它执行得很好。我已经像 PyQt5 一样安装了 PySide2:


python3 -m pip install PyQt5

python3 -m pip install PySide2

macOS 随后重新启动。


现在,安装了 PySide2 后,当我尝试加载 Ui 文件时,我在 macOS 中遇到错误。


MRE 可在 Linux、Windows 和 macOS Catalina 下运行:


#!/usr/bin/env python3


# Standard library imports

import sys


# Third party imports

from 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 imports

import sys


# Third party imports

from 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等。


狐的传说
浏览 85回答 1
1回答

SMILET

不要使用相对路径,因为它们容易出错,因为它将取决于脚本的运行方式,而是构建绝对路径:import os.pathCURRENT_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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python