PYQT5从窗口标题获取文本?

时间:2017-08-07 22:00:57

标签: python python-3.x pyqt pyqt5 mdi

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

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

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

感谢你所有的时间。

1 个答案:

答案 0 :(得分:2)

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

QMdiSubWindow(直接)来自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,Windows 10(64位)中测试过它:

snapshot sequence of testQMDIActiveSubWindow.py in action

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