Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2017 08:54:36

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

Хочу сделать программу из двух файлов. Главный файл сделан с помощью 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__":
...

Отредактировано Kyrym (Янв. 31, 2017 08:59:48)

Офлайн

#2 Янв. 31, 2017 09:22:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

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)



Офлайн

#3 Янв. 31, 2017 09:48:00

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

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()

Офлайн

#4 Янв. 31, 2017 09:55:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

Kyrym
from asa import Window1()
а нахрена здесь скобки то?



Офлайн

#5 Янв. 31, 2017 10:13:30

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

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)

Офлайн

#6 Янв. 31, 2017 10:30:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

Kyrym
Так вот же:
Что вот же? Вы не отличаете импорта от вызова? Может вам всё-таки для начала какой-нибудь учебник почитать?



Офлайн

#7 Янв. 31, 2017 10:43:26

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

Да, со скобками был не прав.

Был бы хороший учебник, меня тут бы не было.

Офлайн

#8 Янв. 31, 2017 10:48:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

Kyrym
Был бы хороший учебник, меня тут бы не было.
А вы, простите, какие уже прочитали, чтобы судить об их качестве?



Офлайн

#9 Янв. 31, 2017 12:02:12

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

Не прочитал, но изучаю именно по PyQt:
Прохоренок_PyQt. Создание оконных прилож на Python 3_2011
Горожанов_PyQt5 для лингвистов_2014

Офлайн

#10 Янв. 31, 2017 12:03:48

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

PyQt4 | QMainWindow + QWidget в виде модуля

Kyrym
Не-не-не. Так не годиться. Сначала принято читать книги по языку, а потом по-библиотекам. Это как сразу ринуться изучать фласк или джангу там. Не стоит этого делать. Ну или хотя-бы в параллель изучать…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version