2016-05-30 19 views
1

我正在創建一個加載了幾個.ui文件的應用程序。第一個是QMainWindow類型,其他是QWidget類型。如何使用PyQt4.uic.loadUi將第二個.ui加載到自己的目錄中?

我不知道如何加載第二個用戶界面(module.ui)到自我,使小部件可通過self.<widget_name>訪問。

這是如何實現的?

from PyQt4 import QtGui 
from PyQt4 import uic 


class TestApp(QtGui.QMainWindow): 
    def __init__(self): 
     super(TestApp, self).__init__() 

     # Load main window and the module 
     uic.loadUi('main_window.ui', self) # QMainWindow, contains testLayout, loads into self 
     ui_module = uic.loadUi('module.ui') # QWidget 

     # Attach module to main window 
     self.testLayout.addWidget(ui_module) # this works fine 

     # Edit widget in UI module 
     self.label.setText('Hello') # does not work (since self.label doesn't exist) 

我可以這樣做:

self.label = ui_module.label 
self.label.setText('Hello') 

...但我想的UI,而不是加載到從一開始的自我。

如果我嘗試加載UI進自我,我得到一個錯誤:

uic.loadUi('module.ui', self) 
>>> QLayout: Attempting to add QLayout "" to TestApp "Form", which already has a layout 

回答

2

你需要創建一個小部件來加載UI文件到

self.widget = QWidget(self) 
uic.loadUi('module.ui', self.widget) 

self.widget.label.setText('Hello') 

話雖這麼說,它可能會更好,如果您爲其他小部件創建了單獨的類。

class MyWidget(QWidget): 
    def __init__(self, **args, **kwargs): 
     super(MyWidget, self).__init__(*args, **kwargs) 
     uic.loadUi('module.ui', self) 
     self.label.setText('Hello') 

class TestApp(QtGui.QMainWindow): 
    def __init__(self): 
     ... 
     self.widget = MyWidget(self) 
相關問題