Найти - Пользователи
Полная версия: PyQt4 | QMainWindow + QWidget в виде модуля
Начало » GUI » PyQt4 | QMainWindow + QWidget в виде модуля
1 2
Kyrym
Хочу сделать программу из двух файлов. Главный файл сделан с помощью QMainWindow, в который импортируется модуль QWidget.
Как это правильно делается?
Первый файл:
 ...
import asa
class Window(QtGui.QMainWindow): 
    def __init__(self): 
        QtGui.QMainWindow.__init__(self)
        ...
        # Встраиваем модуль QWidget
        widget = asa.Window1()
        widget.show()
...
Второй файл (тут вроде всё понятно) ‘asa’:
 ...
class Window1(...
if __name__ == "__main__":
...
FishHook
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)
Kyrym
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()

FishHook
Kyrym
from asa import Window1()
а нахрена здесь скобки то?
Kyrym
FishHook
()
Так вот же:
 bar_obj = Bar()

Если я убираю скобки, то вижу:
UnicodeEncodeError: ‘latin-1’ codec can't encode characters in position 3-5: ordinal not in range(256)
FishHook
Kyrym
Так вот же:
Что вот же? Вы не отличаете импорта от вызова? Может вам всё-таки для начала какой-нибудь учебник почитать?
Kyrym
Да, со скобками был не прав.

Был бы хороший учебник, меня тут бы не было.
FishHook
Kyrym
Был бы хороший учебник, меня тут бы не было.
А вы, простите, какие уже прочитали, чтобы судить об их качестве?
Kyrym
Не прочитал, но изучаю именно по PyQt:
Прохоренок_PyQt. Создание оконных прилож на Python 3_2011
Горожанов_PyQt5 для лингвистов_2014
4kpt_IV
Kyrym
Не-не-не. Так не годиться. Сначала принято читать книги по языку, а потом по-библиотекам. Это как сразу ринуться изучать фласк или джангу там. Не стоит этого делать. Ну или хотя-бы в параллель изучать…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB