无法获得MDI标签顺序

时间:2014-11-16 19:50:45

标签: python pyqt qt-designer

我正在使用QtDesigner并拥有一个带有两个标签的MDI应用程序。我似乎无法让标签打开我想要的方式。我希望子窗口具有焦点,并且在应用程序打开时成为左侧的第一个窗口。所以' subwindow_2'将在右侧,并且在应用程序打开时不会有焦点。

当应用程序打开时,我的焦点是正确的。但是Tab键顺序错误。换句话说,焦点在于子窗口'但这显示在右边而不是左边。

我在QtDesigner中尝试了很多东西,例如更改创建顺序和堆叠顺序之间的激活顺序,但这似乎没有任何效果。我该如何解决这个问题?

import sys
from PyQt4 import QtCore, QtGui
from phreqMDI import Ui_MainWindow

class MyForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MyForm,self).__init__(parent)
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)       

        self.ui.mdiArea.addSubWindow(self.ui.subwindow_2)
        self.ui.mdiArea.addSubWindow(self.ui.subwindow)

有人提到pyuic4在MDI方面表现不佳。也许我需要在代码中更改某些内容而不是在QtDesigner中进行更改?

1 个答案:

答案 0 :(得分:1)

您需要以正确的Tab键顺序添加它们,然后显式激活相关的子窗口:

    self.ui.mdiArea.addSubWindow(self.ui.subwindow)
    self.ui.mdiArea.addSubWindow(self.ui.subwindow_2)
    self.ui.mdiArea.setActiveSubWindow(
        self.ui.mdiArea.subWindowList()[0])

<强> PS

由于某些原因,在__init__期间设置有效子窗口时似乎需要使用subWindowList。将addSubWindow的返回值传递给setActiveSubWindow对我来说并不起作用 - 但这可能是特定于平台的事情(我在Linux上测试过)。

<强>更新

因此,假设您在Windows上,似乎确实存在一些特定于平台的差异。要解决此问题,请尝试使用计时器设置活动子窗口,如下所示:

    self.ui.mdiArea.addSubWindow(self.ui.subwindow)
    self.ui.mdiArea.addSubWindow(self.ui.subwindow_2)
    QtCore.QTimer.singleShot(10,
        lambda: self.ui.mdiArea.setActiveSubWindow(
                self.ui.mdiArea.subWindowList()[0]))