我有一个pyqt应用程序,我希望在单击菜单项时显示一个对话框。如果对话框失去焦点并且再次单击菜单项,则会将对话框置于最前面。到目前为止一切正常。在
问题是当对话框打开然后关闭时,单击菜单项不会创建/显示新的对话框。我想我知道为什么,但找不到解决办法
代码如下:
from ui import mainWindow, aboutDialog
class ReadingList(QtGui.QMainWindow, mainWindow.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.about = None
self.actionAbout.triggered.connect(self.showAbout)
def showAbout(self):
# If the about dialog does not exist, create one
if self.about is None:
self.about = AboutDialog(self)
self.about.show()
# If about dialog exists, bring it to the front
else:
self.about.activateWindow()
self.about.raise_()
class AboutDialog(QtGui.QDialog, aboutDialog.Ui_Dialog):
def __init__(self, parent=None):
super(self.__class__, self).__init__()
self.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
readingList = ReadingList()
readingList.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
问题在于第一次创建对话框时,self.about
不再是{showAbout()
中的条件允许我将对话框放在前面,而不是创建一个新的对话框(else条件)
但是,当对话框关闭时,self.about
不再是{
我怎样才能在第一个对话框之后创建对话框呢?在
我考虑过重写AboutDialog
类中的closeEvent
方法,但我不确定如何获取对readingList
的引用,以返回一条消息,说明对话框已关闭。或者我想得太多了,也许self.about.show()
的返回可以用在什么地方?在
(我知道我可以使用模态对话框来避免所有这些,但我想试着弄清楚这一点)
可能有几种方法可以做到这一点,但有一种可能:
(注意:不要将
self.__class__
与super
一起使用,因为在某些情况下,它可能导致无限递归。始终将子类作为第一个参数传入-除非您使用的是Python3,在这种情况下可以忽略所有参数)。在相关问题 更多 >
编程相关推荐