2017-11-30 13 views
0

私はMDI AreaサブウィンドウのobjectNameを取得する方法は?

self.mdiArea.activeSubWindow().objectName 
self.mdiArea.activeSubWindow().objectName() 

を試してみましたが、それらのどちらも私が設定されたオブジェクト名ました:

self.subwindow.setObjectName("subwindow_1") 

何かアドバイスを?どうもありがとう。完全なテストコードが添付されています

# Created by: PyQt5 UI code generator 5.6 

from PyQt5 import QtCore, QtGui, QtWidgets 
class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(687, 438) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) 
     self.mdiArea.setGeometry(QtCore.QRect(140, 10, 531, 381)) 
     self.mdiArea.setObjectName("mdiArea") 
     self.subwindow = QtWidgets.QWidget() 
     self.subwindow.setObjectName("subwindow_test_the_object_name") 
     self.Add = QtWidgets.QPushButton(self.centralwidget) 
     self.Add.setGeometry(QtCore.QRect(10, 30, 121, 23)) 
     self.Add.setObjectName("Add") 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtWidgets.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 687, 21)) 
     self.menubar.setObjectName("menubar") 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtWidgets.QStatusBar(MainWindow) 
     self.statusbar.setObjectName("statusbar") 
     MainWindow.setStatusBar(self.statusbar)  
     self.Add.clicked.connect(self.Add_window) # connect the button to Add_window function 
     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 
    def Add_window(self): 
     self.mdiArea.addSubWindow(self.subwindow) 
     print("there is a subwindow activated") 
     self.mdiArea.activeSubWindow() 
     self.subwindow.show() 
     Act_window=self.mdiArea.activeSubWindow() 
     print("this is subwindow 1 "+str(Act_window.objectName())) 
    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
     self.subwindow.setWindowTitle(_translate("MainWindow", "Subwindow")) 
     self.Add.setText(_translate("MainWindow", "Add Window")) 
if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

これは、サブウィンドウでは動作しないのobjectName()と非常に簡単なサンプルがあるが、それはボタンと親MDIareaと連携し、私の目標は、次のようなアクティブなサブウィンドウのオブジェクト名を取得することですsubwindow_test_the_object_nameこの場合、異なるオブジェクト名を持つサブウィンドウが複数ある場合、このオブジェクト名をシグナルとして取得できます。ありがとう。

self.subwindow = QtWidgets.QWidget() 
self.subwindow.setObjectName("subwindow_test_the_object_name") 

あなたがQMdiSubWindow、ないQMdiSubWindowの内側にあることを行っているウィジェットに名前を与えているので、あなたは、その要素の名前を取得したい場合は、次の条件を満たす必要があります。次の命令で

+0

'self.mdiArea.activeSubWindow()。objectName()'は原則的に正しいです。それでも問題が解決しない場合は、[mcve]を追加してください。 – FJSevilla

+0

@FJSevillaご意見ありがとうございました。私は単純なサンプルを添付しましたが、objectName()がMDIareaサブウィンドウでうまく動作しないようです。ありがとう。 – Tom

答えて

0

def Add_window(self): 
    self.mdiArea.addSubWindow(self.subwindow) 
    print("there is a subwindow activated") 
    self.mdiArea.activeSubWindow() 
    self.subwindow.show() 
    Act_window =self.mdiArea.activeSubWindow() 
    print("this is subwindow 1 "+str(Act_window.widget().objectName())) 

出力:

there is a subwindow activated 
this is subwindow 1 subwindow_test_the_object_name 
QMdiSubWindowの widget()メソッドを使用します10
+0

ありがとうeyllanesc、それは今動作する、それを得るためにもう一度.widget()を呼び出す必要があるか分からなかった。 – Tom

+0

mpl_toolbarを使用してMDIサブウィンドウの下にある2つのプロットウィンドウを制御するときに、時にはこれに "ad locked"が表示されることがあります。 – Tom

+0

@Tom質問がある場合は、質問を作成してください。 – eyllanesc

関連する問題