2017-08-07 76 views
0

我希望我有一个简单的问题。我有一个pyqt mainwindow,它有一个用于子窗口的mdi区域。我希望能够从当前子窗口中获取标题的文本并将其设置为变量。PYQT5从窗口标题中获取文本?

我这样做的原因是,当你点击我的主窗口的其他部分时,我有mdi子窗口打开编辑已输入的数据。我希望用户能够一次打开和编辑多组数据,并且我正在标题栏中设置数据的目录键。我认为这是区分目前编辑哪组数据的好方法。

我不确定这是否是最好的方式,甚至是实现我想要的一种好方法。如果有另一种方法会更好,我很乐意听到它。

谢谢你的所有时间。

+1

请显示您的代码 – eyllanesc

+0

我在Qt C++文档中找到了['QMdiArea :: subWindowActivated()'](http://doc.qt.io/qt-5/qmdiarea.html#subWindowActivated)。 ['MDISubWindow'](http://doc.qt.io/qt-5/qmdisubwindow.html)直接来自['QWidget'](http://doc.qt.io/qt-5/qwidget .html),它又有一个属性['windowTitle'](http://doc.qt.io/qt-5/qwidget.html#windowTitle-prop)。我没有在代码中尝试它,但对我而言,这听起来像一个计划... – Scheff

回答

2

QMdiArea提供了一种方法QMdiArea::activeSubWindow()以及信号QMdiArea::subWindowActivated()

QMdiSubWindow是(直接)从QWidget派生而来,而QWidget又提供了属性QWidget::windowTitle

把它放在一起,它应该工作。

我编写了一个MCVE作为“概念验证”(并培训我的Python/PyQt技能)。

示例代码testQMDIActiveSubWindow.py

#!/usr/bin/python3 

import sys 
from PyQt5.QtWidgets import QApplication, QMainWindow, QMdiArea, QMdiSubWindow 

def updateActiveChild(subWindow): 
    win.setWindowTitle("MDI Test: '%s'" % subWindow.windowTitle()) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    # build GUI 
    win = QMainWindow() 
    win.resize(640, 480) 
    mdiArea = QMdiArea() 
    for title in ["Data:1", "Data:2", "Data:3", "Data:n"]: 
    mdiChild = QMdiSubWindow() 
    mdiChild.setWindowTitle(title) 
    mdiArea.addSubWindow(mdiChild) 
    mdiArea.tileSubWindows() 
    win.setCentralWidget(mdiArea) 
    win.show() 
    updateActiveChild(mdiArea.activeSubWindow()) 
    # install signal handlers 
    mdiArea.subWindowActivated.connect(updateActiveChild) 
    # exec. application 
    sys.exit(app.exec_()) 

我在python3,cygwin64测试它,视窗10(64位):

snapshot sequence of testQMDIActiveSubWindow.py in action

活性子窗口的标题反映在主窗口的标题。