2011-12-08 19 views
0

GUIを実装していて、アイコンがGUIに表示されません。開発パスはgitクローン(リポジトリディレクトリ)です。パスを単純なローカルパスに変更すると、GUIのアイコンが表示されます。PyQt4:アイコンがGUIに表示されない

この問題の原因または解決方法については、何か考えてください。

GUIはQtDesignerで設計されています。 GUIのコードはここにある

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) 

事前のおかげでここにあります。

クリス

+0

Sry私はコードを追加しました – Chris

+0

これはファイルシステムの問題のようです。ディレクトリ内からアイコン/相対位置にアプリを実行していますか?あなたのdevパスはどのように見え、どこでアプリケーションを起動しますか?また、あなたが実際にQMainWindowを__init__する必要があることを忘れないでください。 – jdi

答えて

5

あなたの問題は、ファイルシステム上のアイコンへの絶対パス対最も可能性の高い相対的で、そしてあなたのアプリを起動しているところ。 問題を解決するための完全な代替案として、リソースファイルを使用することをお勧めします。 Qt Designerから作成し、GUIでそれらを参照し、pyrcc4(pyuic4と同様)を使って変換することができます。アイコンはすべてファイルにエンコードされるので、ファイルシステムのパスの問題はなくなります。 QtGui.QPixmap(":icons/Filter.png")

お知らせ ":"

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

リソースを参照の例は次のように見ていることになります。これはあなたのアイコンをキャッシュして持ち運びできるようにする本当に良い方法です。

+0

pyrcc4は私の問題を解決する方法でした – Chris

関連する問題