2017-08-07 110 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

活性子窗口的標題反映在主窗口的標題。