Объекты в типичном приложении Qt соединены вместе в отношениях родителя/ребенка. Чаще всего есть главное окно верхнего уровня, которое функционирует как корневой объект, а все остальные объекты (виджеты, макеты и т. Д.) Расположены в иерархии под ним.
Учитывая это, очень естественно поместить всю связанную с gui программную логику в класс главного окна, потому что все остальные объекты будут доступны через self
. Но если вы поместите всю связанную с gui логику в функции в отдельных модулях, то нет self
. Поэтому вам будет необходимо предоставить эту недостающую функциональность.
Самый очевидный способ сделать это было бы сохранить ссылку на окно верхнего уровня в модуле, который запускает приложение, так что другие модули могут импортировать:
from app_module import main_window
# my_functions.py
def fill_table():
for row in range(10):
for col in range(10):
item_value = "...."
item = QtGui.QTableWidgetItem()
item.setText(str(item_value))
main_window.table_widget.setItem(row, col, item)
В качестве альтернативы, вы может перепроектировать все функции так, что они работают только на один объект (или класс объектов), а затем явно передать экземпляр:
# my_functions.py
def fill_table(table_widget):
...
Однако, каким бы образом вы это делаете, это трудно понять, как это может быть «лучшим» способом структурирования кода.
Большинство приложений gui состоят из нескольких довольно крупных подкомпонентов, которые работают независимо друг от друга независимо друг от друга, а также центрального контроллера/менеджера, который организует их все в единую функциональную единицу. Подкомпоненты обычно представляют собой подклассы виджетов (возможно, живущие в отдельных модулях), которые станут дочерними элементами главного окна, которое также может функционировать как контроллер/менеджер. Организация кода в этих строках намного больше соответствует тому, как Qt предназначен для работы, и автоматически избежит большинства потенциальных проблем связи между различными частями приложения.
Вы можете переписывать функции в новые файлы по мере необходимости и вызывать их из основного сценария. –