일반적인 Qt 애플리케이션의 객체는 부모/자식 관계로 함께 연결됩니다. 대부분의 경우 루트 객체로 작동하는 최상위 기본 윈도우가 있으며 다른 모든 객체 (위젯, 레이아웃 등)는 그 아래에 계층 구조로 배열되어 있습니다.
이 경우 모든 다른 객체는 self
을 통해 액세스 할 수 있기 때문에 모든 GUI 관련 프로그램 로직을 메인 윈도우 클래스에 넣는 것은 매우 자연스러운 일입니다. 그러나 모든 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가 작동하도록 설계된 방식에 훨씬 더 가깝고 응용 프로그램의 다양한 부분간에 발생할 수있는 대부분의 통신 문제를 자동으로 피할 수 있습니다.
필요에 따라 함수를 새 파일에 다시 쓰고 기본 스크립트에서 호출 할 수 있습니다. –