2016-06-29 6 views
0

Ich habe eine Schnittstellendatei von QtDesigner generiert, die ich im Falle von Änderungen beibehalten möchte.Verwenden Sie separate Interface-Datei mit PyQt

Haben Sie eine Hauptdatei namens application.py behandeln alle Funktionen, und eine Datei ausschließlich für Schnittstellen Zeug.

Ich verwende PyQt5.

Ich konnte keine Tutorials zu dieser speziellen Frage finden, irgendwelche Hinweise wären hilfreich.

-Code von YatsiInterface.py (verkürzt)

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_YatsiWindow(object): 

    def setupUi(self, YatsiWindow): 
     YatsiWindow.setObjectName("YatsiWindow") 
     YatsiWindow.resize(800, 516) 
     icon = QtGui.QIcon() 
     icon.addPixmap(QtGui.QPixmap("Terraria.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 
     YatsiWindow.setWindowIcon(icon) 
     self.windowLayout = QtWidgets.QWidget(YatsiWindow) 
     self.windowLayout.setObjectName("windowLayout") 
     self.horizontalLayout = QtWidgets.QHBoxLayout(self.windowLayout) 
     self.quitButton.setObjectName("quitButton") 
     self.buttonsLeftLayout.addWidget(self.quitButton) 
     YatsiWindow.setCentralWidget(self.windowLayout) 
     self.statusbar = QtWidgets.QStatusBar(YatsiWindow) 
     self.statusbar.setObjectName("statusbar") 
     YatsiWindow.setStatusBar(self.statusbar) 

     self.retranslateUi(YatsiWindow) 
     QtCore.QMetaObject.connectSlotsByName(YatsiWindow) 

    def retranslateUi(self, YatsiWindow): 
     _translate = QtCore.QCoreApplication.translate 
     YatsiWindow.setWindowTitle(_translate("YatsiWindow", "Yatsi - Server Interface")) 
     self.quitButton.setText(_translate("YatsiWindow", "Quit")) 

Wie kann ich self.quitButton.clicked.connect(QtCore.QCoreApplication.instance().quit()) mit dem obigen Code verwenden? Ich weiß, um die Datei mit from YatsiInterface import Ui_YatsiWindow zu importieren, aber ich bin im Dunkeln, wie Sie Schaltflächenfunktionen erstellen, ohne die Schnittstellendatei zu bearbeiten.

Edit:

Ich werde mein gebrochenes Code unten ein.

import sys 
from YatsiInterface import Ui_YatsiWindow 
from PyQt5 import QtCore, QtGui, QtWidgets 

app = QtWidgets.QApplication([]) 
YatsiWindow = QtWidgets.QMainWindow() 
ui = Ui_YatsiWindow() 

ui.setupUi(YatsiWindow) 
# Here's the bad part 
ui.setupUi.btn.clicked.connect(QtCore.QCoreApplication.instance().quit) 
# Up there^

YatsiWindow.show() 
sys.exit(app.exec_()) 

Danke für Ihre Hilfe.

Antwort

2

das Signal

ui.quitButton.clicked.connect(QtCore.QCoreApplication.instance().quit) 

Dies wäre der Weg zu verbinden, aber sagen, dass wollen Sie wahrscheinlich nicht, dies zu tun. Sie sollten sich wahrscheinlich mit der .close Methode des Fensters verbinden. Wenn das Fenster geschlossen wird, beendet Qt standardmäßig die Ereignisschleife und beendet sich.

ui.quitButton.clicked.connect(YatsiWindow.close) 
+0

Vielen Dank für Ihre Hilfe. Die Lösung war so einfach und schnell, aber so einfach zu implementieren. – spikespaz

1
from YatsiInterface import Ui_YatsiWindow 
from PyQt5 import QtCore, QtGui 

class my_application(QtGui.QWidget, Ui_YatsiWindow): 

    def __init__(self): 
     super(my_application, self).__init__() 
     self.setupUi(self) 
     self.quitButton.clicked.connect(self.my_mythod) 

    def my_method(self): 
     pass #all your code for the buttons clicked signal 

if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    ui = my_application() 
    ui.show() 
    sys.exit(app.exec_()) 

Diese my_application Klasse Benutzeroberfläche Klasse erbt. Jetzt können Sie Ihre knopfbezogenen Funktionen schreiben, ohne die Benutzerschnittstellendatei zu bearbeiten.

self.quitButton.clicked.connect(self.close) 

Dies schließt Ihre Benutzeroberfläche, wenn auf die Schaltfläche geklickt wird.