PyQt5 - 显示来自不同类

时间:2016-07-23 10:25:29

标签: qt python-3.x pyqt5 qdialog

我的应用由QMainWindowQToolBar组成。我的目的是点击QToolBar元素并在单独的窗口(QDialog)中打开日历。

我想在单独的班级中创建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)

1 个答案:

答案 0 :(得分:0)

发布的代码似乎几乎是正确的,这是一个完整的工作示例,我添加了一些resize以使小部件大小"可接受":

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