Если вы посмотрите на комментарии в верхней части созданного файла, вы увидите строку:
# WARNING! All changes made in this file will be lost!
Это делает его совершенно ясно, что файл не предназначен для редактирования. Но это не проблема, потому что это просто обычный модуль python, и поэтому достаточно легко импортировать его в основное приложение и получить доступ к нему оттуда.
Все, что вам нужно сделать, это создать подкласс объекта верхнего уровня с помощью Qt Designer (который будет QMainWindow
, QDialog
или QWidget
), а затем использовать setupUi
метод, предоставленный сгенерированного модулем для сложения всех виджеты к экземпляру этого подкласса.
Таким образом, если объект верхнего уровня с помощью Qt Designer был назван «MainWindow», pyuic создаст соответствующий Ui_MainWindow
класс, который может быть импортирован в main.py
сценарий и используется что-то вроде этого:
from PyQt4 import QtCore, QtGui
from myui import Ui_MainWindow
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.button.clicked.connect(self.handleButton)
def handleButton(self):
print('Hello World!')
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
См Using Qt Designer в PyQt Documentation для более подробной информации.
Можете ли вы достичь того же самого, непосредственно подклассифицируя 'Ui_MainWindow' и вызывая' Ui_MainWindow .__ init __ (self) ', поскольку он вызывает' setupUi() 'в любом случае? –
@three_pineapples. Да, существует несколько разных способов достижения той же цели, которые описаны в документации PyQt (к которой я теперь связан в своем ответе). Я думаю, что метод в моем ответе более чисто композиционный, но я на самом деле его не очень много использую в своем собственном коде (это все просто вопрос вкуса, действительно). – ekhumoro