PyQt4: значки не отображаются в графическом интерфейсе - PullRequest
0 голосов
/ 08 декабря 2011

Я использую графический интерфейс, а значки не отображаются в графическом интерфейсе. Путь разработки - это git clone (каталог репозиториев). Если я изменю путь на простой локальный путь, будут отображаться значки в графическом интерфейсе.

Есть идеи по поводу причины или решения этой проблемы?

Графический интерфейс разработан в QtDesigner. Код для графического интерфейса генерируется из pyuic4

Вот оно:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(803, 502)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8("icons/Server.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 803, 22))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        self.menuFilter = QtGui.QMenu(self.menubar)
        self.menuFilter.setObjectName(_fromUtf8("menuFilter"))
        self.menuFile = QtGui.QMenu(self.menubar)
        self.menuFile.setObjectName(_fromUtf8("menuFile"))
        MainWindow.setMenuBar(self.menubar)
        self.toolBar = QtGui.QToolBar(MainWindow)
        self.toolBar.setObjectName(_fromUtf8("toolBar"))
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
        self.toolBar_2 = QtGui.QToolBar(MainWindow)
        self.toolBar_2.setObjectName(_fromUtf8("toolBar_2"))
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar_2)
        self.actionFilter = QtGui.QAction(MainWindow)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(_fromUtf8("icons/Filter.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionFilter.setIcon(icon1)
        self.actionFilter.setObjectName(_fromUtf8("actionFilter"))
        self.actionFilter_by_Server = QtGui.QAction(MainWindow)
        self.actionFilter_by_Server.setObjectName(_fromUtf8("actionFilter_by_Server"))
        self.actionExit = QtGui.QAction(MainWindow)
        self.actionExit.setObjectName(_fromUtf8("actionExit"))
        self.menuFilter.addAction(self.actionFilter_by_Server)
        self.menuFile.addAction(self.actionExit)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuFilter.menuAction())
        self.toolBar.addAction(self.actionFilter)

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

def retranslateUi(self, MainWindow):
    MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Development Monitoring", None, QtGui.QApplication.UnicodeUTF8))
    self.menuFilter.setTitle(QtGui.QApplication.translate("MainWindow", "Filter", None, QtGui.QApplication.UnicodeUTF8))
    self.menuFile.setTitle(QtGui.QApplication.translate("MainWindow", "File", None, QtGui.QApplication.UnicodeUTF8))
    self.toolBar.setWindowTitle(QtGui.QApplication.translate("MainWindow", "toolBar", None, QtGui.QApplication.UnicodeUTF8))
    self.toolBar_2.setWindowTitle(QtGui.QApplication.translate("MainWindow", "toolBar_2", None, QtGui.QApplication.UnicodeUTF8))
    self.actionFilter.setText(QtGui.QApplication.translate("MainWindow", "Filter", None, QtGui.QApplication.UnicodeUTF8))
    self.actionFilter.setStatusTip(QtGui.QApplication.translate("MainWindow", "Filter", None, QtGui.QApplication.UnicodeUTF8))
    self.actionFilter.setShortcut(QtGui.QApplication.translate("MainWindow", "Ctrl+F", None, QtGui.QApplication.UnicodeUTF8))
    self.actionFilter_by_Server.setText(QtGui.QApplication.translate("MainWindow", "Filter by Server", None, QtGui.QApplication.UnicodeUTF8))
    self.actionExit.setText(QtGui.QApplication.translate("MainWindow", "Exit", None, QtGui.QApplication.UnicodeUTF8))

Код для отображения GUI находится здесь

class MainWindow(QtGui.QMainWindow):

    def __init__(self, app, parent= None):
        log.trace()
        QtGui.QWidget.__init__(self,parent)
        self.app=app
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

Заранее спасибо.

Chris

1 Ответ

5 голосов
/ 11 декабря 2011

Скорее всего, ваша проблема относительно абсолютного пути к значкам в вашей файловой системе и того, где вы запускаете приложение. В качестве совершенно альтернативного предложения, чтобы исправить вашу проблему, я рекомендую использовать файл ресурсов. вы можете создать его из Qt Designer, сослаться на них в вашем графическом интерфейсе, а затем преобразовать его, используя pyrcc4 (аналог pyuic4). Все значки будут закодированы в файл, поэтому у вас больше не будет проблем с путями в файловой системе.

http://doc.qt.nokia.com/stable/designer-resources.html

Пример ссылки на ресурс будет выглядеть так: QtGui.QPixmap(":icons/Filter.png")

Обратите внимание на ":". Это действительно хороший способ кешировать ваши иконки и сделать их переносимыми.

...