4

我正在用 python 和 pyqt4 为我的树莓派制作一个程序。现在我在我的树莓上启动程序,它给出了错误,它没有显示我制作的按钮。我已经设计成qtdesinger,它显示了窗口,但上面什么也没有。

这是我的错误:

X Error: BadAccess (attempt to access private resource denied) 10
  Extension:    129 (MIT-SHM)
  Minor opcode: 1 (X_ShmAttach)
  Resource id:  0x2800001
X Error: BadShmSeg (invalid shared segment parameter) 128
  Extension:    129 (MIT-SHM)
  Minor opcode: 5 (X_ShmCreatePixmap)
  Resource id:  0x280000a
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)
  Resource id:  0x280000b
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)
  Resource id:  0x280000b
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)
  Resource id:  0x280000b

这是来自 qtdesigner 的我的 python 代码:

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(480, 640)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(120, 140, 83, 24))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.toolButton = QtGui.QToolButton(Form)
        self.toolButton.setGeometry(QtCore.QRect(350, 250, 27, 20))
        self.toolButton.setObjectName(_fromUtf8("toolButton"))
        self.buttonBox = QtGui.QDialogButtonBox(Form)
        self.buttonBox.setGeometry(QtCore.QRect(150, 280, 156, 24))
        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDia$
        self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
        self.commandLinkButton = QtGui.QCommandLinkButton(Form)
        self.commandLinkButton.setGeometry(QtCore.QRect(160, 230, 168, 41))
        self.commandLinkButton.setObjectName(_fromUtf8("commandLinkButton"))
        self.checkBox = QtGui.QCheckBox(Form)
        self.checkBox.setGeometry(QtCore.QRect(130, 380, 84, 19))
        self.checkBox.setObjectName(_fromUtf8("checkBox"))
        self.toolButton_2 = QtGui.QToolButton(Form)
        self.toolButton_2.setGeometry(QtCore.QRect(160, 470, 27, 20))
        self.toolButton_2.setObjectName(_fromUtf8("toolButton_2"))
        self.listView = QtGui.QListView(Form)
        self.listView.setGeometry(QtCore.QRect(60, 460, 256, 192))
        self.listView.setObjectName(_fromUtf8("listView"))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtG$
        self.pushButton.setText(QtGui.QApplication.translate("Form", "Lamp", None,$
        self.toolButton.setText(QtGui.QApplication.translate("Form", "...", None, $
        self.commandLinkButton.setText(QtGui.QApplication.translate("Form", "Comma$
        self.checkBox.setText(QtGui.QApplication.translate("Form", "CheckBox", Non$
        self.toolButton_2.setText(QtGui.QApplication.translate("Form", "...", None$

这是我的文件来显示窗口: import sys from PyQt4 import QtCore, QtGui from test import Ui_Widget

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Widget()
        self.ui.setupUi(self)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())

有没有人为我提供解决方案?我用谷歌搜索了这个错误,但没有找到我的问题的答案。

谢谢...

4

2 回答 2

1

我对 python 应用程序有同样的问题。

我发现了以下内容:

  1. 使用VNC,以自己身份登录Gnome桌面并以自己身份运行应用程序,工作100%
  2. 以我自己的身份登录桌面时,运行 xhost +
  3. sudo 将用户切换到另一个用户并且应用程序失败
  4. 作为新用户,export DISPLAY=hostname:
  5. 运行应用程序,现在它可以 100% 运行

这开始于包含更新版本的 pyqt 和 libqt 的 python 更新。

作为一个侧面测试,我可以完美地运行“眼睛”和“火狐”(不导出显示变量)

当 pyqt 尝试在使用“/unix”MIT-MAGIC-COOKIE-1 时“填充”X11 窗口时,问题似乎出现了......使用“hostname:instance”MIT-MAGIC-COOKIE 时,相同的例程工作-1

于 2014-01-10T09:44:13.400 回答
1

我发现与 Unetbootin 类似的问题。它需要 root 权限,当 X-server 从用户启动时,例如使用startx命令,它会给出同样的错误。

解决方案是使用显示管理器,如 lxdm、gdm 等。

我的猜测是 QT 无法提升访问某些共享内存的权限,因为 X 以用户权限运行。并使用桌面管理器以 root 权限运行。

于 2016-09-28T13:00:20.193 回答