我正在使用 PySide2 GUI 开发一个简单的 Python 应用程序。它目前在 Windows、Linux 和 Mac 上运行良好。在 Windows 上,我可以使用 PyInstaller 和 InnoSetup 来构建一个简单的安装程序。然后我尝试在 Mac 上做同样的事情。它很快就崩溃了,因为系统拒绝启动 PyInstaller 生成的命令或应用程序,因为它没有正确签名。因为我不是苹果开发者,所以我不能签署任何东西......
经过一番研究,我尝试了 py2app。我可以在这里更进一步。和
python setup.py py2app -A
我可以创建一个可运行的应用程序。显然不能移植到不同的系统,因为它使用我的开发文件夹。如果我使用python setup.py py2app生成的程序无法启动,因为 py2app 没有复制所有必需的 Qt 东西。我试着将缺失的库一一添加,但最后系统找不到插件,我放弃了......
有人可以帮助我使用 Qt GUI 将 python 脚本或包转换为 Mac 上的便携式应用程序吗?理想情况下,配方应该说明如何使用自定义应用程序图标,但这不是必需的。
由于我的真实包对于 SO 问题来说太大了,因此我将其缩减为最小的可重现示例:
from PySide3.QtWidgets import *
import sys
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        hello = QLabel('Hello', self)
        hello.move(50, 50)
def run(args):
    app …当我尝试为Python-3.6安装PySide时,它说它只能在Python-3.4之前兼容.是否有任何解决方法为Python-3.6安装它?
似乎只支持这些Python版本:
[(2, 6), (2, 7), (3, 2), (3, 3), (3, 4)].
有谁知道我在哪里可以找到PySide2的pip-install?
这是2017年,我似乎无法找到包含PySide2二进制文件的pip安装或site-package.我不想处理下载源代码并自行编译,因为这通常会让人头疼,因为它从来都不是一个平滑的过程.也考虑到其他人很可能已经做到了.如果我在这里说实话,如果我试图自己编译并出现错误,我真的不知道从哪里开始解决它们,我也不想花时间去做.
我发现很难相信当VFX行业的很多应用程序都转向PySide2时,我无法在网上或甚至在PIP中找到它.
我希望有人可以帮助我.谢谢
我有一个PySide2.QtCore.QByteArray对象叫做roleName我编码了一个 python 字符串:
propName = metaProp.name() // this is call of [const char *QMetaProperty::name() ](https://doc.qt.io/qt-5/qmetaproperty.html#name)
// encode the object
roleName = QByteArray(propName.encode())
print(roleName) // this gives b'myname'
// now I would like to get just "myname" without the "b" 
roleString = str(roleName)
print(roleString) // this gives the same output as above
如何取回解码后的字符串?
我所做的是打电话
pyinstaller example.py
pyinstaller 为我的脚本获取所有重要的库。值得一提的是,我正在 Windows 机器上工作。但是当我运行结果时,它告诉我:
? .\example.exe
Traceback (most recent call last):
  File "example.py", line 6, in <module>
  File "c:\applications\anaconda\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module
    module = loader.load_module(fullname)
ImportError: could not import module 'PySide2.QtXml'
[7684] Failed to execute script example
所以这里有两个问题:
我在我的 python 安装中找不到名为“PySide2.QtXml”的库。所以我假设 .dll 有一个不同的名字?.dll 的真实名称是什么?我找到了Qt5Xml.dll,但我不知道这是否是正确的库。
一旦我有了我的库,我想将它添加到我的 example.spec 文件中。文档说它必须看起来像这样:
binaries=[ ( '/usr/lib/libiodbc.2.dylib', 'libiodbc.dylib' ) ],
但我不确定如何将它应用到我目前缺少的库中。我假设
binaries=[ ( 'C:\somepath\Qt5Xml.dll', 'Qt5Xml.dll' ) ],
将是要走的路?
提前致谢!
当我运行基本脚本时:
import sys
from PySide2.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
label = QLabel("Hello World")
label.show()
app.exec_()
这是第一次一切正常.但是,如果我第二次运行它,我得到:
File "../script.py", line 17, in <module>
app = QApplication(sys.argv)
RuntimeError: Please destroy the QApplication singleton before creating a new QApplication instance.
我在Ubuntu机器上运行脚本.我在python2和python3中得到了同样的错误.
谢谢 !
我曾尝试abc.ABCMeta使用sip包装器类型,并且在子类使用时效果很好abc.ABC.
class QABCMeta(wrappertype, ABCMeta):
    pass
class WidgetBase(QWidget, metaclass=QABCMeta):
    ...
class InterfaceWidget(WidgetBase, ABC):
    ...
class MainWidget(InterfaceWidget):
    ...
但它不起作用typing.Generic.
class QGenericMeta(wrappertype, GenericMeta):
    pass
class WidgetBase(QWidget, Generic[T], metaclass=QGenericMeta):
    ...
class GenericWidget(WidgetBase[float]):
    ...
它提出:
line 980, in __new__
    self if not origin else origin._gorg)
TypeError: can't apply this __setattr__ to sip.wrappertype object
我希望它像往常一样使用泛型子类:
class TableBase(QTableWidget, Generic[T]):
    @abstractmethod
    def raw_item(self, row: int) -> T:
        ...
    def data(self) -> Iterator[T]:
        yield from (self.raw_item(row) for row in range(self.rowCount()))
class MainTable(TableBase[float]):
    def …有没有办法在 Qt Creator 中激活 Python 虚拟环境,即确保 Qt Creator 发出的准备/分析/构建当前项目的所有不同命令都在特定的 virtualenv 中运行?
当尝试在 Qt Creator 中使用 Shiboken 和 PySide 时会出现此问题。例如,可以使用 CMake 在 Pyside(跨 Windows、OSX 和 Linux)中成功编译并运行“scriptableapplication”示例。但是,在同一系统上工作时,无法使用 Qt Creator 和 qmake 来执行此操作,因为 virtualenv 未激活。在 Qt Creator 中打开 scriptableapplication.pro 项目时,会显示以下消息:
Unable to locate shiboken2-generator. Did you forget to activate your virtualenv?
这确实是事实,Qt Creator 发出的 shell 命令没有激活 virtualenv。
我正在尝试创建一个抽象基类,它也继承任意 PySide6 类。但是,以下会产生错误TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases。
from abc import ABC, abstractmethod
from PySide6.QtWidgets import QApplication, QWidget
class MyBaseWidget(QWidget, ABC):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
    
    @abstractmethod
    def foo(self):
        pass
class MyConcreteWidget(MyBaseWidget):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
app = QApplication([])
widget = MyConcreteWidget()
widget.show()
app.exec_()
我尝试使用下面看到的解决方案来解决这个问题(灵感来自解决元类冲突,http://www.phyast.pitt.edu/~micheles/python/metatype.html,多重继承元类冲突等)。
class MyMeta(ABCMeta, type(QWidget)): pass
class MyBaseWidget(QWidget, metaclass=MyMeta):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
    
    @abstractmethod
    def …我想在Ubuntu上编写一个简单的桌面应用程序,我认为一种简单的方法是将Qt与QML用作GUI,将Python用作逻辑语言,因为我对Python有点熟悉。
现在,我花了几个小时尝试以某种方式连接GUI和逻辑,但是它不起作用。我管理连接QML-> Python,但没有其他方法。我有代表我的数据模型的Python类,并添加了JSON编码和解码功能。因此,目前尚不涉及SQL数据库。但是,也许QML视图和某些数据库之间的直接连接会使事情变得更容易?
所以现在一些代码。
QML-> Python
QML文件:
ApplicationWindow {
// main window
id: mainWindow
title: qsTr("Test")
width: 640
height: 480
signal tmsPrint(string text)
Page {
    id: mainView
    ColumnLayout {
        id: mainLayout
        Button {
            text: qsTr("Say Hello!")
            onClicked: tmsPrint("Hello!")
        }
    }
}    
}
然后我有我的slot.py:
from PySide2.QtCore import Slot
def connect_slots(win):
    win.tmsPrint.connect(say_hello)
@Slot(str)
def say_hello(text):
    print(text)
最后是我的main.py:
import sys
from controller.slots import connect_slots
from PySide2.QtWidgets import QApplication
from PySide2.QtQml import QQmlApplicationEngine 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    engine = QQmlApplicationEngine()
    engine.load('view/main.qml') …pyside2 ×10
python ×9
python-3.x ×3
pyinstaller ×2
pyside ×2
qt ×2
installation ×1
macos ×1
metaclass ×1
py2app ×1
pyqt ×1
pyqt5 ×1
pyside6 ×1
python-2.7 ×1
python-3.6 ×1
qbytearray ×1
qml ×1
qt-creator ×1
shiboken2 ×1
string ×1
typing ×1
virtualenv ×1
windows ×1