Qt - 显示父项后无法显示Qt.Tool窗口?

时间:2012-01-26 02:42:44

标签: qt dialog pyqt show flags

我基本上有一个QMainWindow和一个Dialog窗口,其构造函数如下所示;

class VisualTool(QtGui.QDialog):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.WidgetBoard = Ui_Aesthetics_Tool()
        self.WidgetBoard.setupUi(self)
        self.setWindowFlags(QtCore.Qt.Tool)    # <-

正如您所看到的,我想将Dialog视为工具窗口(它正是我需要的窗口类型)。单击QMainWindow后,应显示工具窗口,并与QMainWindow进行交互以继续。

在显示QMainWindow之前,在我的工具窗口上调用.show()会正确生成它。
但是,如果我尝试在显示QMainWindow之后显示我的工具窗口(例如在单击按钮后),则调用.show()和.exec()无效。

(甚至没有任何窗口的闪烁。没有任何产生!)

显示窗口后,我无法更改窗口标志。它没有效果。

如何显示此工具窗口?!
谢谢!


PyQt4中
python 2.7.2
Windows 7

1 个答案:

答案 0 :(得分:1)

我不确定我明白你的问题究竟是什么。这个测试代码片段似乎运行正常,但我不知道你缺少的Ui_Aesthetics_Tool()代码修改工具窗口的作用:

#!/usr/bin/env python

import sys
from PyQt4 import QtCore, QtGui


class Main(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.resize(640,480)        
        self.button = QtGui.QPushButton("Click me")
        self.setCentralWidget(self.button)

        self.button.clicked.connect(self.showTool)

    def showTool(self):
        tool = VisualTool(self)
        tool.show()

class VisualTool(QtGui.QDialog):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        # self.WidgetBoard = Ui_Aesthetics_Tool()
        # self.WidgetBoard.setupUi(self)
        self.setWindowFlags(QtCore.Qt.Tool)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = Main()
    myapp.show()
    sys.exit(app.exec_())

我可以启动多个工具窗口。 至于使用exec_(),这是一个模态阻塞调用,可能不是你想要的。