2015-03-02 68 views
1

我想添加文本到我一直在使用基於對這個問題的答案接受按鈕添加一個文本框:Dynamically adding and removing widgets in pyqt訪問動態添加小部件(PyQt的)

我的問題不過是,我無法訪問我已添加的文本框。 This後告訴我,我可以使用itemAt()來循環使用addWidget()添加到佈局時添加的項目。但是我只能訪問類型QWidgetIem

這裏是我的代碼的「內部佈局」: -

from PyQt4 import QtGui, QtCore 
import sys 

class Main(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     super(Main, self).__init__(parent) 

     # main button 
     self.addButton = QtGui.QPushButton('button to add other widgets') 
     self.addButton.clicked.connect(self.addWidget) 

     # scroll area widget contents - layout 
     self.scrollLayout = QtGui.QHBoxLayout() 

     # scroll area widget contents 
     self.scrollWidget = QtGui.QWidget() 
     self.scrollWidget.setLayout(self.scrollLayout) 

     # scroll area 
     self.scrollArea = QtGui.QScrollArea() 
     self.scrollArea.setWidgetResizable(True) 
     self.scrollArea.setWidget(self.scrollWidget) 

     # main layout 
     self.mainLayout = QtGui.QVBoxLayout() 

     # add all main to the main vLayout 
     self.mainLayout.addWidget(self.addButton) 
     self.mainLayout.addWidget(self.scrollArea) 

     # central widget 
     self.centralWidget = QtGui.QWidget() 
     self.centralWidget.setLayout(self.mainLayout) 

     # set central widget 
     self.setCentralWidget(self.centralWidget) 





    def addWidget(self): 
     self.scrollLayout.addWidget(Test()) 

     # This doesn't work 
     print self.scrollLayout.itemAt(0) 

class Test(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(Test, self).__init__(parent) 

    # Sensor Indicator 
     self.pushButton = QtGui.QPushButton() 
     self.pushButton.setStyleSheet("background-color: green") 

    # Console Window to display sensor data 
     self.logOutput = QtGui.QTextEdit() 
     self.logOutput.setReadOnly(True) 
     self.logOutput.setLineWrapMode(QtGui.QTextEdit.NoWrap) 
     self.font = self.logOutput.font() 
     self.font.setFamily("Courier") 
     self.font.setPointSize(10) 


     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.pushButton) 
     layout.addWidget(self.logOutput) 
     self.setLayout(layout) 



app = QtGui.QApplication(sys.argv) 
myWidget = Main() 
myWidget.show() 
app.exec_() 

回答

2

一個QWidgetItem有一些檢索它所包含的對象widget()功能:

def addWidget(self): 
     self.scrollLayout.addWidget(Test()) 

     index = self.scrollLayout.count() - 1 
     widget = self.scrollLayout.itemAt(index).widget() 
     if widget is not None: 
      widget.logOutput.setText('Hello World!') 
+0

謝謝,那完美的工作 – anath2 2015-03-03 04:59:21