Pyrym
@Pyrym
Python 3 и PyQt5

PyQt4 | Как в функциях ссылаться на несуществующие элементы?

Данная программа создаёт поля и кнопки, но я не знаю, как мне ссылаться в функциях на эти элементы, которые ещё не существуют.
Функция старт должна умножать левое поле на два и выводить в правое поле своего ряда.
Функция клик выводит в консоль число из левого поля своего ряда.
# Python 3. PyQt4
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui


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

        self.setWindowTitle('Заголовок')

        self.grid = QtGui.QGridLayout()
               

        # ПОЛЯ       
        names_pole = ['12','','7','','4','']
        pos_pole = [(0, 0), (0, 1),
                    (1, 0), (1, 1),
                    (2, 0), (2, 1)]
        j = 0
        for i in names_pole:
            self.pole = QtGui.QLineEdit(i)
            self.grid.addWidget(self.pole, pos_pole[j][0], pos_pole[j][1])
            j = j + 1      
            self.pole.textChanged.connect(self.on_start) # сигнал изм текста
        
        # КНОПКИ
        names_button = ['Copy', 'Copy', 'Copy']      
        pos_button = [(0, 3), (1, 3), (2, 3)]
        j = 0
        for i in names_button:
            self.button = QtGui.QPushButton(i)
            self.grid.addWidget(self.button, pos_button[j][0], pos_button[j][1])
            j = j + 1
            self.button.clicked.connect(self.on_click)

        self.setLayout(self.grid)
    
    def on_start(self):
        a = self.pole.text()
        b = 2*a
        self.pole.setText(str(b)) 
        print('старт')
    
    def on_click(self):
        a = self.pole.text()
        print(a,'клик')

app = QtGui.QApplication(sys.argv)
qb = GridLayout()
qb.show()
sys.exit(app.exec_())
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
mFoxRU
@mFoxRU
Храни ссылки на объекты в словаре. Хорошим подходом считается сперва создать все элементы, а потом уже соединять их.

Кроме того, тут
for i in names_pole:
            self.pole = QtGui.QLineEdit(i)

self.pole перезаписывается, поэтому в функциях оно всегда будет ссылаться на последний созданный лайнэдит. То же самое и с self.button.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы