Добавление виджета QListWidget как страницы вкладки QTabWidget
Необходимо реализовать при создании вкладки Tab Widget добавление на нее элемента listWidget.
Каким образом можно это реализовать?
from PyQt5 import uic, QtWidgets
from PyQt5.QtWidgets import QTabWidget, QWidget, QListWidget, QVBoxLayout, QLabel, QPushButton
Form , _ = uic.loadUiType('form.ui')
class Ui(QtWidgets.QDialog, Form):
def __init__ (self):
super(Ui, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.add_data)
self.gridTabWidget.currentChanged.connect(self.tabChanged)
def tabChanged(self):
#нажатие на вкладку
print('tab was', self.gridTabWidget.currentIndex())
def add_data(self):
#нажатие на кнопку
#добавление вкладки
self.gridTabWidget.addTab(QWidget(), 'new user')
if __name__ =="__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Ui()
w.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
int QTabWidget::addTab(QWidget *page, const QString &label)
Добавляет вкладку с заданной страницей и меткой в виджет вкладки и возвращает индекс вкладки на панели вкладок. Право собственности на страницу передается QTabWidget.
main.py
from PyQt5 import uic
from PyQt5.QtWidgets import QTabWidget, QWidget, QListWidget, QVBoxLayout, \
QLabel, QPushButton, QApplication, QMessageBox
class ListWidget(QListWidget): # +++ ListWidget()
def _clicked(self,item):
QMessageBox.information(self, "ListWidget", "You clicked: "+item.text())
Form , _ = uic.loadUiType('child_window.ui') # !!! child_window.ui
class Ui(QWidget, Form): # QDialog
def __init__ (self):
super(Ui, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.add_data)
self.tabWidget.currentChanged.connect(self.tabChanged)
def tabChanged(self):
#нажатие на вкладку
print('tab was', self.tabWidget.currentIndex())
def add_data(self):
listWidget = ListWidget() # +++ ListWidget()
listWidget.addItems(["Item 1", "Item 2", "Item 3", "Item 4", ]) # +++
listWidget.itemClicked.connect(listWidget._clicked) # +++
self.tabWidget.addTab(listWidget, 'new user') # +++ listWidget
if __name__ =="__main__":
import sys
app = QApplication(sys.argv)
w = Ui()
w.resize(500, 400)
w.show()
sys.exit(app.exec())
child_window.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1191</width>
<height>941</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>940</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="tabPosition">
<enum>QTabWidget::West</enum>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Tab 1</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="rowCount">
<number>5</number>
</property>
<row/>
<row/>
<row/>
<row/>
<row/>
<column>
<property name="text">
<string>A</string>
</property>
</column>
<column>
<property name="text">
<string>B</string>
</property>
</column>
<column>
<property name="text">
<string>C</string>
</property>
</column>
<column>
<property name="text">
<string>D</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Tab 2</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
