LINUX.ORG.RU

PyQt QTextEdit + QTabWidget

 


0

1

Уважаемые ГУРУ, я написал виджет(внутри QTextEdit) который добаляется в каждую новую вкладку QTabWidget. Вопрос: как мне можно например добавить в QTextEdit текст, если виджет генерится динамически?

★★★

Ответ на: комментарий от AUX

нужно как-то обращаться к созданому объекту. Ну как?

Так же как и к любому другом объекту. Покаж исходники.

Siado ★★★★★ ()

я тебя правильно понял?

import sys
from PyQt4 import QtGui, QtCore

class MyWidget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.resize(400, 300)
        self.setWindowTitle('Simple')
        
        grid = QtGui.QGridLayout()
        self.setLayout(grid)
        
        self.le = QtGui.QLineEdit()
        self.btn = QtGui.QPushButton('Add')
        self.tab = QtGui.QTabWidget()
        
        grid.addWidget(self.le,  0,0)
        grid.addWidget(self.btn, 0,1)
        grid.addWidget(self.tab, 1,0, 1,2)
        
        QtCore.QObject.connect(self.btn, QtCore.SIGNAL("clicked()"),
                               self.click)
        QtCore.QObject.connect(self.tab, QtCore.SIGNAL("selected(QString)"),
                               self.select)

    def click(self):
        self.tab.addTab(MyWidget(), self.le.text())
    def select(self, text):
        self.le.setText(text)

app = QtGui.QApplication(sys.argv)

widget = MyWidget()
widget.show()

sys.exit(app.exec_())

anonymous ()
Ответ на: комментарий от anonymous

Вот примерчик ибо громозкий код тащить не хочу

Сразу извиняюсь за говнокод, ибо написал быстро. Cуть такая: метод addtext_slot (слот) должен добавлять текст в каждый по отдельности QTextEdit в каждой вкладке, т.е кнопка долна добавлять текст в зависимости какая вкладка с QTextEdit открыта.

import sys
from PyQt4.QtGui import *
from PyQt4 import uic

( Ui_MainWindow, QMainWindow ) = uic.loadUiType('form.ui')


class MyWidget(QWidget):

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        layout=QVBoxLayout()
        textedit=QTextEdit()
        layout.addWidget(textedit)
        self.setLayout(layout)


class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    def __del__(self):
        self.ui = None

    def addtab_slot(self):
        newtab=MyWidget()
        self.ui.tabWidget.addTab(newtab,"tab")

    def addtext_slot(self):
        #How ???????????????????????
        pass
#-----------------------------------------------------#
if __name__ == '__main__':

    app = QApplication(sys.argv)
    app.setApplicationName('untitled2')
    # create widget
    w = MainWindow()
    w.setWindowTitle('untitled2')
    w.show()
    sys.exit(app.exec_())

form.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form1</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <layout class="QVBoxLayout" name="verticalLayout"/>
    </item>
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
       <number>-1</number>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="addtab">
      <property name="text">
       <string>AddTab</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="addtext">
      <property name="text">
       <string>AddText</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>addtab</sender>
   <signal>clicked()</signal>
   <receiver>MainWindow</receiver>
   <slot>addtab_slot()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>199</x>
     <y>244</y>
    </hint>
    <hint type="destinationlabel">
     <x>199</x>
     <y>149</y>
    </hint>
   </hints>
  </connection>
  <connection>
   <sender>addtext</sender>
   <signal>clicked(bool)</signal>
   <receiver>MainWindow</receiver>
   <slot>addtext_slot()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>199</x>
     <y>277</y>
    </hint>
    <hint type="destinationlabel">
     <x>199</x>
     <y>149</y>
    </hint>
   </hints>
  </connection>
 </connections>
 <slots>
  <slot>addtab_slot()</slot>
  <slot>addtext_slot()</slot>
 </slots>
</ui>

AUX ★★★ ()
Ответ на: комментарий от AUX
import sys
from PyQt4 import QtGui, QtCore

class MyTab(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        grid = QtGui.QGridLayout()
        self.setLayout(grid)
        self.le = QtGui.QLineEdit()
        grid.addWidget(self.le)
        

class MyWidget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.resize(400, 300)
        self.setWindowTitle('Simple')
        
        grid = QtGui.QGridLayout()
        self.setLayout(grid)
        
        self.le = QtGui.QLineEdit()
        self.tab_le = None
        self.tab = QtGui.QTabWidget()
        self.btnAdd = QtGui.QPushButton('Add')
        self.btnTab = QtGui.QPushButton('Tab')
        
        grid.addWidget(self.tab, 0,0, 1,2)
        grid.addWidget(self.btnAdd, 1,0)
        grid.addWidget(self.btnTab, 1,1)
        grid.addWidget(self.le, 2,0, 1,2)
        
        QtCore.QObject.connect(self.btnTab, QtCore.SIGNAL("clicked()"),
                               self.clickTab)
        QtCore.QObject.connect(self.btnAdd, QtCore.SIGNAL("clicked()"),
                               self.clickAdd)
        QtCore.QObject.connect(self.tab, QtCore.SIGNAL("selected(QString)"),
                               self.select)

    def clickTab(self):
        self.tab.addTab(MyTab(), 'Tab')
        
    def clickAdd(self):
        if self.tab_le:
            self.tab_le.setText(self.le.text());
        
    def select(self, text):
        self.tab_le = self.tab.currentWidget().le

app = QtGui.QApplication(sys.argv)

widget = MyWidget()
widget.show()

sys.exit(app.exec_())
anonymous ()

Re: Вот примерчик ибо громозкий код тащить не хочу

в твоем коде:

textedit=QTextEdit()
сделай частью MyWidget (self.textedit). в функции addtext_slot получай текущий Widget (self.ui.tabWidget.currentWidget()), а у него уже можно будет получить заветный .textedit.

anonymous ()

Поправил код, всё работает! Спасибо ОГРОМНОЕ!!!

import sys
from PyQt4.QtGui import *
from PyQt4 import uic

( Ui_MainWindow, QMainWindow ) = uic.loadUiType('form.ui')


class MyWidget(QWidget):

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        layout=QVBoxLayout()
        self.textedit=QTextEdit()
        layout.addWidget(self.textedit)
        self.setLayout(layout)


class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    def __del__(self):
        self.ui = None

    def addtab_slot(self):
        newtab=MyWidget()
        self.ui.tabWidget.addTab(newtab,"tab")

    def addtext_slot(self):
        text=self.ui.tabWidget.currentWidget().textedit
        text.insertPlainText("MyText")

        pass
        #-----------------------------------------------------#
if __name__ == '__main__':

    app = QApplication(sys.argv)
    app.setApplicationName('untitled2')
    # create widget
    w = MainWindow()
    w.setWindowTitle('untitled2')
    w.show()
    sys.exit(app.exec_())

AUX ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.