PYQT5从窗口标题中获取文本?
问题描述:
我希望我有一个简单的问题。我有一个pyqt mainwindow
,它有一个用于子窗口的mdi
区域。我希望能够从当前子窗口中获取标题的文本并将其设置为变量。PYQT5从窗口标题中获取文本?
我这样做的原因是,当你点击我的主窗口的其他部分时,我有mdi
子窗口打开编辑已输入的数据。我希望用户能够一次打开和编辑多组数据,并且我正在标题栏中设置数据的目录键。我认为这是区分目前编辑哪组数据的好方法。
我不确定这是否是最好的方式,甚至是实现我想要的一种好方法。如果有另一种方法会更好,我很乐意听到它。
谢谢你的所有时间。
答
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位):
活性子窗口的标题反映在主窗口的标题。
请显示您的代码 – eyllanesc
我在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