PyQt5 - 从不同的 class 显示 QDialog
PyQt5 - Show QDialog from a different class
我的应用由 QMainWindow
和 QToolBar
组成。我的目的是点击一个 QToolBar
元素并在单独的 window (QDialog
) 中打开一个日历。
我想在单独的 class 中创建一个 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)
发布的代码似乎几乎正确,这里是一个完整的工作示例,我添加了一些 resize
以使小部件大小 "acceptable":
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class CalendarDialog(QDialog):
def __init__(self, parent):
super().__init__(parent)
self.cal = QCalendarWidget(self)
self.resize(300, 300)
self.cal.resize(300, 300)
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.resize(400, 200)
toolBar = QToolBar(self)
calendarAction = QAction(QIcon('test.png'), 'Calendar', self)
calendarAction.triggered.connect(self.openCalendar)
toolBar.addAction(calendarAction)
def openCalendar(self):
self.calendarWidget = CalendarDialog(self)
self.calendarWidget.show()
app = QApplication([])
ex = Example()
ex.show()
app.exec_()
我的应用由 QMainWindow
和 QToolBar
组成。我的目的是点击一个 QToolBar
元素并在单独的 window (QDialog
) 中打开一个日历。
我想在单独的 class 中创建一个 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)
发布的代码似乎几乎正确,这里是一个完整的工作示例,我添加了一些 resize
以使小部件大小 "acceptable":
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class CalendarDialog(QDialog):
def __init__(self, parent):
super().__init__(parent)
self.cal = QCalendarWidget(self)
self.resize(300, 300)
self.cal.resize(300, 300)
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.resize(400, 200)
toolBar = QToolBar(self)
calendarAction = QAction(QIcon('test.png'), 'Calendar', self)
calendarAction.triggered.connect(self.openCalendar)
toolBar.addAction(calendarAction)
def openCalendar(self):
self.calendarWidget = CalendarDialog(self)
self.calendarWidget.show()
app = QApplication([])
ex = Example()
ex.show()
app.exec_()