2011-12-08 5 views
0

GUI를 구현했는데 아이콘이 GUI에 표시되지 않습니다. 개발 경로는 git clone (저장소 디렉토리)입니다. 경로를 단순 로컬 경로로 변경하면 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가 아닌 ​​QMainWindow를 __init__해야한다는 것을 잊지 마십시오. – jdi

답변

5

귀하의 문제는 파일 시스템의 아이콘에 절대 경로 대 가장 가능성이 상대적으로, 당신은 당신의 응용 프로그램을 실행하는 경우. 문제를 해결할 수있는 완전히 다른 방법으로 자원 파일을 사용하는 것이 좋습니다. 당신은 Qt Designer 내에서 하나를 생성하고, GUI에서 그것을 참조 할 수 있으며, pyrcc4 (pyuic4와 유사)를 사용하여 그것을 변환 할 수 있습니다. 아이콘은 파일에 모두 인코딩되므로 더 이상 파일 시스템 경로 문제가 발생하지 않습니다.

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

자원을 참조의 예는 다음과 같이보고 끝낼 것 : QtGui.QPixmap(":icons/Filter.png")

주목하라 ":"를. 이것은 아이콘을 캐시하고 이식성있게 만드는 정말 좋은 방법입니다.

+0

pyrcc4가 내 문제를 해결할 수있는 방법이었습니다. – Chris

관련 문제