2013-11-13 2 views
0

Я сделал интерфейс, используя Qt Designer и сохранили его в файле main.uiPySide и Qt4 возвращая пустое окно

Итак, я попробовал 2 способа, чтобы показать мое окно с помощью питона и оба вернулись пустое окно : enter image description here

Первая попытка (с помощью main.ui непосредственно):

from PySide.QtGui import * 
from PySide.QtCore import * 
from PySide import QtUiTools 

class MainApp(QMainWindow): 
    def init(self, *args): 
     apply(QMainWindow.__init__,(self,) + args) 

     loader = QtUiTools.QUiLoader() 
     file = QFile("main.ui") 
     file.open(QFile.ReadOnly) 
     self.myWidget = loader.load(file, self) 
     file.close() 

     self.setCentralWidget(self.myWidget) 

if __name__ == '__main__': 
    import sys 
    import os 
    print "Running in %s.\n" % os.getcwd() 

    app = QApplication(sys.argv) 
    window = MainApp() 
    window.show() 

    app.connect(app, SIGNAL("lastWindowClosed()"), 
       app, SLOT("quit()") 
    ) 
    app.exec_() 

для второй попытки, я использовал PySide-uic.exe для создания main.py файла:

from PySide.QtGui import * 
from PySide.QtCore import * 
from qt_gui.main import * 
import sys 

class MainApp(QtGui.QMainWindow, Ui_MainWindow): 
    def init(self, parent = None): 
     super(MainApp, self).__init__(parent) 
     self.setupUi(self) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = MainApp() 
    window.show() 
    sys.exit(app.exec_()) 

Я видел много примеров, делающих то же самое, но никто не работал для меня.

ответ

0

Второй метод, использующий PySide-UIC должен работать, но вы должны правильно вызвать метод __init__ (нижнее подчеркивание отсутствовали в вашем примере кода):

class MainApp(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self, parent = None): 
     super(MainApp, self).__init__(parent) 
     self.setupUi(self) 
+0

Вы были правы, я пропускаю символы подчеркивания. = ( Спасибо и извините. –

1

Вы пробовали что-то вроде этого?

from PyQt4 import QtCore 
from PyQt4 import QtGui 

from PyQt4.uic import loadUiType 
# This method of the PyQt4.uic module allows for dynamically loading user 
# interfaces created by QtDesigner. See the PyQt4 Reference Guide for more 
# info. 
Ui_Main = \ 
    loadUiType(os.path.join(os.path.dirname(__file__),'main.ui'))[0] 
class MainApp(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self, info): 
     """Setup the Properties dialog.""" 

     super(MainApp, self).__init__(parent) 
     self.setupUi(self) 

Это работает для меня. Просто замените Ui_Main на имя, которое вы используете в файле .ui.

Здесь я использую PyQt, но предположим, что он будет работать с PySide.

+0

Vicent это работает, но мне нужно использовать PySide вместо PyQt. –

+0

Не работает ли с PySide? Я думал, что большая часть кода, который работает на PyQt, может работать с PySide, делая минимальные изменения. – Vicent

+1

@ Vicent. С PySide ближайшим эквивалентом является 'QtUiTools.QUiLoader.load()', но это создает экземпляр, а не класс, что, очевидно, намного менее гибко, потому что нет простого способа сделать подкласс. – ekhumoro