我正在使用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中进行更改?
答案 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]))