Мое приложение состоит из QMainWindow
с QToolBar
. Моя цель - нажать на элемент QToolBar
и открыть в отдельном окне (QDialog
) календарь.PyQt5 - Показать QDialog из другого класса
Я хочу создать в отдельном классе a QDialog
и называть его отображаемым с QMainWindow
.
Это мой QDialog
, просто календарь:
class CalendarDialog(QDialog):
def __init__(self):
super().__init__(self)
cal = QCalendarWidget(self)
Теперь из QMainWindow
я хотел бы показать календарь после триггером действий, как в следующем:
class Example(QMainWindow):
...
calendarAction.triggered.connect(self.openCalendar)
...
def openCalendar(self):
self.calendarWidget = CalendarDialog(self)
self.calendarWidget.show()
Это не работает , После события, которое вызывает openCalendar
, приложение закрывается без печати ошибки вывода. Я отложил некоторые отпечатки, и CalendarDialog.__init__(self)
даже не вызван.
Код в отношении к QToolBar
выглядит следующим образом:
openCalendarAction = QAction(QIcon(IMG_CALENDAR), "", self)
openCalendarAction.triggered.connect(self.openCalendar)
self.toolbar.addAction(openCalendarAction)
Вы не создаете 'CalendarDialog' в этой строке' self.calendarWidget = SMCalendarWidget (self) ',' SMCalendarWidget' даже существует? – Ceppo93
yep, вы правы. Это была ошибка транскрипции. Я исправил код. – user2607702
Хорошо, можете ли вы поделиться кодом, когда вы «создаете» 'toolBar'? Предоставленное представляется почти правильным, за исключением того, что 'CalendarDialog .__ init __ (self)' не принимает аргументов (сам неявный), и вы вызываете его 'CalendarDialog (self)' с аргументом, возможно, вы хотите указать аргумент 'parent' в '__init__'. – Ceppo93