Форум сайта python.su
186
> Говорю “создай два независимых окна”, этот создаёт иерархию окон. Теперь удали Dialog и вся твоя фигня посыпется, потому что остальные окна зависят от него.
Ну вот тебе 2 “независимых” окна. Прям как ты хочешь.
import sys import PySide.QtGui as QtGui import PySide.QtCore as QtCore class X1(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.label = QtGui.QLabel(self) self.setCentralWidget(self.label) def setBaklan(self): self.label.setText(self.label.text()+u"Обломись ещё раз баклан!\n") class X2(QtGui.QMainWindow): signal = QtCore.Signal() def __init__(self): QtGui.QMainWindow.__init__(self) self.knopka = QtGui.QPushButton(self) self.knopka.setText(u"Нажми меня") self.knopka.clicked.connect(self.signal) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) win1 = X1() win1.show() win2 = X2() win2.signal.connect(win1.setBaklan) win2.show() sys.exit(app.exec_())
Офлайн
857
RodegastИ какое отношение сигнал из окна X2 имеет к окну X1? Чем обосновано нахождение сигнала внутри класса X2? Ты запутался, задёргался.
Ну вот тебе 2 “независимых” окна.
Отредактировано py.user.next (Окт. 9, 2017 12:55:21)
Офлайн
186
> И какое отношение сигнал из окна X2 имеет к окну X1? Чем обосновано нахождение сигнала внутри класса X2?
Вот как раз с этим всё очень просто. Источником сигнала является окно X2, по этому и сигнал определён как его атрибут. X1 никакого отношения к этому не имеет, мы просто подписываем его на событие из X2.
> ты не можешь делать два QMainWindow в одном приложении, потому что QMainWindow - это кучка виджетов (меню, централка и статусная строка), собранных в одном окне, это шаблон такой
Ну да QMainWindow это заготовка. И что? Конечно приложение с 2-я главными окнами смотрится странно, но ты же сам этого захотел.
> когда ты докопался до его (zetcode Jan Bodnar) окна в виде QWidget. Почему он так сделал, а не через QMainWindow.
Потому что он дебилойд. Многие оконные менеджеры могут по разному обрабатывать окна разных типов (запусти третий гном и посмотри как он это делает) и не учитывать этот факт никак нельзя.
> Он просто видит это всё заранее, поэтому он так и пишет
Офлайн
857
RodegastИсточником сигнала (и в сигнале даже это где-то записывается внутри объекта) является тот, кто вызвал emit() у сигнала (явно или неявно). Потом это можно через вызов sender() узнавать на том конце, где сигнал получен. При этом сигнал не должен создаваться где-то внутри объекта, посылающего его. А добавление сигнала в интерфейс объекта делается тогда, когда от объекта нужно получать информацию о состоянии. Кнопка, например, может послать сигнал, что её нажали. То есть она была в ненажатом состоянии, а потом она стала нажатой - состояние изменилось (из множества состояний кнопки). То же самое таймер: у него есть сигнал свой, который сообщает о переходе объекта в состояние завершённости (timeout). А твой сигнал никакого отношения к множеству состояний окна не имеет. Поэтому оно и выглядит так безграмотно - как будто в интерфейсе окна какая-то левая ручка торчит. Это как во входную дверь встроить кран для наливания воды, который даже к воде не подключён. А если его и подключить к воде, то это всё равно бредовым и бесполезным останется. Он не должен там быть вообще. Мало ли, что он там работает и вода из него льётся, с кружкой туда всё равно никто бегать не будет.
Источником сигнала является окно X2, по этому и сигнал определён как его атрибут.
Отредактировано py.user.next (Окт. 10, 2017 03:49:39)
Офлайн
186
> А твой сигнал никакого отношения к множеству состояний окна не имеет.
Вполне себе имеет. Множество состояний окна это сумма состояний всех его виджетов, knopka не сама по себе существует, а находится внутри окна, по этому изменение её состояния можно считать изменением состояния всего окна.
Офлайн
0
Извините, что лезу в спор, но не подскажете что-то вроде справочника по pyqt5? Или qt под c++ справочники тоже подойдут?
Офлайн
857
salvoronisВообще, надо уметь применять основной справочник по Qt/C++, потому что не всегда справочник по pyqt успевает за версиями Qt. Но для этого может понадобиться и в C++ разбираться немного, потому что иногда надо проверять на практике примеры из документации.
Или qt под c++ справочники тоже подойдут?
Офлайн
0
Спасибо за ответ!
А чтобы сделать хоть какой-то дизайн можно использовать css? Или что-то еще?
Офлайн