С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 9
PyQt6

Как создать несколько кнопок в цикле для Pyqt6

14.10.2022, 16:50. Показов 4555. Ответов 10

Студворк — интернет-сервис помощи студентам
1) У меня есть TableWidget

2)Есть цикл заполнения его

мне нужно первую колонку всех строк заполнить кнопками, которые вызывают формы (отдельно функцией я сделал это благодаря твоему видосу).

я понимаю что нужно создать для всех строк объект кнопки и привязать к каождой создание—>открывание нужной формы. Примерно это выглядит так:

Python
1
2
3
pushBatton_n = QtWidgets.QPushButton()
 
self.ui.tableWidget_2.setCellWidget(0, 0, pushBatton_n)
как грамотно организовать создание pushBatton_n если n (кол. строк) допустим будет 10

для наглядности таблицу прикрепил
Миниатюры
Как создать несколько кнопок в цикле для Pyqt6  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2022, 16:50
Ответы с готовыми решениями:

Как добавить в цикле динамически несколько кнопок и повесить на каждую событие?
День добрый... В Vb я новичек... Использую VB 6.3. Как можно добавить динамически в цикле несколько кнопок на форму и привязать к ним...

Создать несколько кнопок для копирования по клику.
Всем привет! Если не сложно кто-нибудь помогите разобраться. Столкнулся с такой проблемой: на страницу выведены картинки из папки img возле...

Подписать на событие несколько кнопок в цикле
Как пройтись по всем кнопкам и поставить событие: private void buttons_MouseEnter(object sender, EventArgs e) { ...

10
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
14.10.2022, 17:12
Лучший ответ Сообщение было отмечено fastym как решение

Решение

Python
1
2
3
4
for i in range(10):
   btn = QtWidgets.QPushButton(f'{i}')
   btn.clicked.connect(...)
   self.ui.tableWidget_2.setCellWidget(i, 0, btn)
1
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 9
14.10.2022, 21:59  [ТС]
Спасибо большое

Добавлено через 2 часа 0 минут
iSmokeJC, ´

а можете пожалуйста еще подсказать, вот такой кусок кода:

#Создание кнопки

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def addLabelPrintingForm(self):
    def printLabel():
        # Тут хочу получить информацию взять информацию
        
        widget.close()
 
        widget.close()
    widget = QtWidgets.QDialog(self)
    boxLabel = box.Ui_dialogLabelPrint()
    boxLabel.setupUi(widget)
    boxLabel.label.setText(f'Номер задания: {self.ui.btn.text()}')
    boxLabel.pushButton_1.clicked.connect(printLabel())
    widget.exec()
# в цикле я создаю кнопку, помещаю ее в таблицу и привязываю функцию к ней:
Python
1
2
3
orderInfo = {"code1c": 12345, "cuntLabelPrint": 1}
self.ui.btn = QtWidgets.QPushButton(f'{order["orderId"]}')
self.ui.btn.clicked.connect(self.addLabelPrintingForm)

Как я могу передать словарь orderInfo в функцию printLabel?


сори если ужасно написан код, 2 месяц войны с python
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
14.10.2022, 23:11
Python
1
self.ui.btn.clicked.connect(lambda: self.addLabelPrintingForm(orderInfo))
Цитата Сообщение от fastym Посмотреть сообщение
сори если ужасно написан код
зачем функция внутри функции?
0
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 9
15.10.2022, 02:12  [ТС]
iSmokeJC,

Я не знаю как по другому сделать закрытие диалогового окна по кнопке. Если выносить за эту функцию он же не знает что такое widget

Добавлено через 15 минут
разобрался, убрал функцию из функции
0
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 9
19.10.2022, 13:15  [ТС]
iSmokeJC,

Не подскажите такой момент. Если создавать таким циклом:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# форма для кнопки
def addLabelPrintingForm(self, orderId):
    widget = QtWidgets.QDialog(self)
    boxLabel = box.Ui_dialogLabelPrint()
    boxLabel.setupUi(widget)
    boxLabel.label.setText(f'Номер задания: {orderId}')
    boxLabel.pushButton_1.clicked.connect(lambda: self.printLabelForm(widget, infoProducts, boxLabel, order))
    boxLabel.spinBox.setFocus()
    widget.exec()
 
# созданием кнопку и помещаем в таблицу
row = 0
for orderId in [1, 2, 3, 4, 5]:
    self.ui.btn = QtWidgets.QPushButton(orderId)
    self.ui.btn.clicked.connect(lambda: self.addLabelPrintingForm(orderId=self.ui.btn.text()))
    self.ui.tableWidget_2.setCellWidget(row, 0, self.ui.btn)
    row += 1
Есть проблемка, он создает 5 строк с кнопками 1-2-3-4-5. Если открыть 5 кнопку в функцию попадет orderId последней созданной кнопки (т.е. при нажатии на 1-2-3-4 orderId будет = 5, можно этого как-то избежать?

Я конечно могу создать self.ui.btn_1, self.ui.btn_2 и т.д. это же скорее всего будет работать, но хочется магии)
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
19.10.2022, 14:53
сохраняйте этот orderId как поле класса кнопки при её создании
а потом в обработчике клика получаем к id доступ через любой_живой_потомок_QObject.sender().ord erId
пример:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore    import *
 
def addLabelPrintingForm():
  print(QObject().sender().orderId)
 
 
app = QApplication(sys.argv)
tableWidget = QTableWidget(5,1)
 
row = 0
for orderId in [1, 2, 3, 4, 5]:
    btn = QPushButton(str(orderId))
    btn.orderId = orderId
    btn.clicked.connect(addLabelPrintingForm)
    tableWidget.setCellWidget(row, 0, btn)
    row += 1
 
tableWidget.show()
sys.exit(app.exec_())
2
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 9
19.10.2022, 15:25  [ТС]
огромное спасибо, то что нужно!
0
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 9
20.10.2022, 01:24  [ТС]
kapbepucm,

А есть какой-то стандартный вариант для пагинация QTableWidget? У меня туда приходит лист с словарями и я его распихиваю. Так-то в голове есть идея как реализовать пагинацию, но вдруг есть уже штатные методы.

интернетчик шуршал но ничего дельного не находил.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
20.10.2022, 09:28
Qt предоставляет только примитивные виджеты с минимально нужным функционалом, и думаю, что стандртного ничего не будет по этому вопросу, только свои велосипеды
0
0 / 0 / 0
Регистрация: 17.01.2020
Сообщений: 9
20.10.2022, 13:23  [ТС]
kapbepucm,

Понял, ну и на том и спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2022, 13:23
Помогаю со студенческими работами здесь

Как создать в цикле несколько матриц
В общем ситуация такая, есть база данных, в которых по сессиям размещены результаты экспериментов. С помощью sql-запроса в матлаб...

Как через цикл создать программно несколько кнопок
Добрый день всем. Подскажите пожалуста как через цыкл создать програмно несколько кнопок? for( int i = 0; i < 4; ++i ) { ...

Несколько кнопок на форме. Как сделать так, чтобы считывались действия с разных кнопок?
Задание: Составьте программу, позволяющую определять как общее количество пройденных гусеницей сантиметров, так и высоту, на которой она...

Не получается создать несколько кнопок/скриптов
Здравствуйте. Использую этот плагин -> allwebs.ru/plugin, это кнопка, которая позволяет загружать изображение пользователям на сайт, на...

Как лучше перебрать несколько файлов Excel для открытия в цикле
Уважаемые программисты я только начинаю осваивать VBA, поэтому по возможности ответе подробно! Ситуация следующая: я из файла excel...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru