Qt - Не удается отобразить окно Qt.Tool после того, как родитель показан? - PullRequest
1 голос
/ 26 января 2012

У меня в основном QMainWindow и диалоговое окно, конструктор которого показан ниже;

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)    # <-

Как видите, я бы хотел рассматривать Диалог как окно инструментов (это именно тот тип окна, который мне нужен). Окно инструмента должно отображаться после нажатия кнопки на QMainWindow и для продолжения взаимодействия с QMainWindow.

Перед показом моего QMainWindow, вызов .show () в моем окне инструментов корректно запускает его.
Однако, если я попытаюсь показать окно инструментов ПОСЛЕ отображения QMainWindow (например, после нажатия кнопки), вызовы .show () и .exec () не будут иметь никакого эффекта.

(Нет даже мерцания окна. Икры вообще нет!)

После отображения окна я не могу изменить флажки окна. Это не имеет никакого эффекта.

Как мне показать это окно инструментов?!
Спасибо!


PyQt4
питон 2.7.2
Windows 7

1 Ответ

1 голос
/ 26 января 2012

Я не уверен, что понимаю, в чем твоя проблема.Этот фрагмент кода теста работает нормально, хотя я понятия не имею, что делает ваш отсутствующий код 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_ (), это вызов модальной блокировки и, вероятно, не то, что вы хотите.

...