2016-11-12 15 views
0

Я создаю программу с Python 2.7 и столкнулся с проблемой, что часы поиска в Google и на форумах не ответили.Python 2.7 PyQt4 Добавить файл главного окна на вкладку другого главного окна

Моя программа состоит из Main_Window, называемого session_window.py, который содержит виджет Tab. Внутри каждой вкладки должен быть отдельный файл главного окна. Например, одна вкладка session_window.py - это вкладка учетной записи, и у меня есть еще один файл acount1.py, который содержит информацию об учетной записи, которую я хочу встроить на вкладку учетной записи (и да, я знаю, что я записал учетную запись «acount», я будет исправлено позже). Другая вкладка будет называться Graph и должна содержать другой файл Graph.py (хотя я еще не дошел до этой точки).

* В качестве примечания, я назвал свои элементы в соответствии с системой индекса/описания, поэтому они немного длинны и фанки, но это помогает мне.

Я успешно создал файлы, но застрял на их вставке на вкладки session_window.py.

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

import acount1 

class Ui_BxSession(object): 

    def configurePageB(self, BxSession): 

     self.accountTabImport = acount1.Ui_MainWindow 

# B : Session Page 
     BxSession.setObjectName("BxSession") 
     BxSession.resize(800, 600) 

# B_cn1 : Main Space Container 

     self.B_cn1xMainSpace = QWidget(BxSession) 
     self.B_cn1xMainSpace.setObjectName("B_cn1xMainSpace") 

     self.gridLayout_MainB = QGridLayout(self.B_cn1xMainSpace) 
     self.gridLayout_MainB.setObjectName("gridLayout_MainB") 

     BxSession.setCentralWidget(self.B_cn1xMainSpace) 

# B_cn1_cn1 : Tab Window Space Container 

     self.B_cn1_cn1xTabWindowSpace = QTabWidget(self.B_cn1xMainSpace) 
     self.B_cn1_cn1xTabWindowSpace.setObjectName("B_cn1_cn1xTabWindowSpace") 

     self.gridLayout_MainB.addWidget(self.B_cn1_cn1xTabWindowSpace) 

# B_cn1_cn1_tb1 : Account Tab 

     self.B_cn1_cn1_tb1xAccount = QWidget(self.B_cn1_cn1xTabWindowSpace) 
     self.B_cn1_cn1_tb1xAccount.setObjectName("B_cn1_cn1_tb1xAccount") 

     self.B_cn1_cn1xTabWindowSpace.addTab(self.B_cn1_cn1_tb1xAccount, "Account") 

     self.gridLayout_AccountTab = QGridLayout(self.B_cn1_cn1_tb1xAccount) 
     self.gridLayout_AccountTab.setObjectName("gridLayout_AccountTab") 



     self.gridLayout_AccountTab.addWidget(self.accountTabImport) 



# B_cn1_cn1_tb2 : Session Tab 

     self.B_cn1_cn1_tb2xSession1 = QWidget(self.B_cn1_cn1xTabWindowSpace) 
     self.B_cn1_cn1_tb2xSession1.setObjectName("B_cn1_cn1_tb2xSession1") 

     self.B_cn1_cn1xTabWindowSpace.addTab(self.B_cn1_cn1_tb2xSession1, "Session") 

### rest of code left out 

if __name__ == "__main__": 
import sys 
app = QApplication(sys.argv) 
BxSession = QMainWindow() 
ui = Ui_BxSession() 
ui.configurePageB(BxSession) 
BxSession.show() 
sys.exit(app.exec_()) 

Я импортировал файлы, создал сетку для вкладки и попытался добавить Widget в сетку. но я получаю ошибку ниже.

C:\Python27\python.exe "C:/Users/smiths/Desktop/App  Project/AppDev_2/rewritecode/program/session_window.py" 
Traceback (most recent call last): 
File "C:/Users/smiths/Desktop/App Project/AppDev_2/rewritecode/program/session_window.py", line 139, in <module> 
ui.configurePageB(BxSession) 
File "C:/Users/smiths/Desktop/App Project/AppDev_2/rewritecode/program/session_window.py", line 50, in configurePageB 
self.gridLayout_AccountTab.addWidget(self.accountTabImport) 
TypeError: arguments did not match any overloaded call: 
QGridLayout.addWidget(QWidget): argument 1 has unexpected type 'type' 
QGridLayout.addWidget(QWidget, int, int, Qt.Alignment alignment=0): argument 1 has unexpected type 'type' 
QGridLayout.addWidget(QWidget, int, int, int, int, Qt.Alignment alignment=0): argument 1 has unexpected type 'type' 

Process finished with exit code 1 

Я также попытался

self.accountTabImport = acount1.Ui_MainWindow() 

с тем же сообщением об ошибке.

Я также попытался пропустить на определение, как описано выше, и просто включить

self.gridLayout_AccountTab.addWidget(acount1.Ui_MainWindow). 

ту же ошибку.

acount1.py содержит класс, который содержит кучу функций. Не см. Необходимость включить его здесь, но если это необходимо, дайте мне знать. Любая помощь будет принята с благодарностью.

ответ

0

Вам нужно создать экземпляр класса первого (создать объект/экземпляр из класса)

self.accountTabImport = acount1.Ui_MainWindow() 

(обратите внимание на скобки в конце)

Обратите внимание, что вы можете также необходимо предоставить аргументы вышеупомянутый вызов, зависящий от того, что находится в сигнатуре метода Ui_MainWindow.__init__