为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2023-07-18 15:18:51
我想执行一个使用 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


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信