Форум сайта python.su
Хочу сделать программу из двух файлов. Главный файл сделан с помощью QMainWindow, в который импортируется модуль QWidget.
Как это правильно делается?
Первый файл:
... import asa class Window(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) ... # Встраиваем модуль QWidget widget = asa.Window1() widget.show() ...
... class Window1(... if __name__ == "__main__": ...
Отредактировано Kyrym (Янв. 31, 2017 08:59:48)
Офлайн
KyrymМне кажется, так как вы пытаетесь сделать, лучше не надо. Идея в том, чтобы отдельные компоненты программы были как можно более независимы. Зависимости лучше внедрять методами установки или через инициализатор, а не жёстко задавать в коде. У вас есть точка входа if __name__ == “__main__”:, это то место программы, в котором точно известно, какие модули используются и как конструируются отдельные объекты. Модулям друг о друге ничего знать не надо
Как это правильно делается?
# module1 class Foo: def __init__(self, widget): .... # module2 class Bar: ..... # module main if __name__ == "__main__": from module1 import Foo from module2 import Bar bar_obj = Bar() foo_obj = Foo(bar_obj)
Офлайн
FishHook, в Вашем примере программа состоит из трёх файлов?
bar_obj будет встроен в (наследован от) foo_obj
и будет:
class Bar: def __init__(self): ...
class Window(QtGui.QMainWindow): # Класс Window наследует класс QMainWindow def __init__(self, widget): # Создаёт конструктор класса, parent - ссылка на родительский эл-т QtGui.QMainWindow.__init__(self, widget) ... if __name__ == "__main__": app = QtGui.QApplication(sys.argv) # Создаёт объект приложения from asa import Window1() widget_obj = Window1() window = Window(widget_obj) # Создание экземпляра класса window.show() # Отображение окна sys.exit(app.exec_()) # Запуск цикла обработки событий
from asa import Window1()
Офлайн
Kyrymа нахрена здесь скобки то?
from asa import Window1()
Офлайн
FishHookТак вот же:
()
bar_obj = Bar()
UnicodeEncodeError: ‘latin-1’ codec can't encode characters in position 3-5: ordinal not in range(256)
Отредактировано Kyrym (Янв. 31, 2017 10:21:11)
Офлайн
KyrymЧто вот же? Вы не отличаете импорта от вызова? Может вам всё-таки для начала какой-нибудь учебник почитать?
Так вот же:
Офлайн
Да, со скобками был не прав.
Был бы хороший учебник, меня тут бы не было.
Офлайн
KyrymА вы, простите, какие уже прочитали, чтобы судить об их качестве?
Был бы хороший учебник, меня тут бы не было.
Офлайн
Не прочитал, но изучаю именно по PyQt:
Прохоренок_PyQt. Создание оконных прилож на Python 3_2011
Горожанов_PyQt5 для лингвистов_2014
Офлайн
Kyrym
Не-не-не. Так не годиться. Сначала принято читать книги по языку, а потом по-библиотекам. Это как сразу ринуться изучать фласк или джангу там. Не стоит этого делать. Ну или хотя-бы в параллель изучать…
Офлайн