Найти - Пользователи
Полная версия: Помогите с переменными
Начало » Python для новичков » Помогите с переменными
1 2 3
FishHook
babai
Или может я чайник чего-то не так делаю?
Ты чайник и не то делаешь
for i in range(49, 55):
    obj = getattr(c, "line%s" % i)
    sql_per["line%s" % i] = obj.text()
babai
Классно все написал, спасибо и про чайник и про дополнительную переменную)) и даже это отрабатывает без ошибок, только вот не правильно отрабатывает))) Видишь ли, что получается:
def save_info(self):
        c = AddWindow()
        sql_per =dict.fromkeys(["line1", "comboBox1", "line2", "comboBox2", "comboBox3",
                  "line3", "textEdit1", "textEdit2", "line4", "line5",
                  "line6", "line7", "comboBox4"])
        for i in range(49, 55):
            tmp_per = getattr(c, ("line%c" % i))
            sql_per["line%c" % i] = tmp_per.text()
по другому строку tmp_per = getattr(c, (“line%c” % i)) можно записать так self.line1.text(), то есть что такое self я объяснять не буду) а line1 это копия класса self.line1 = QtGui.QLineEdit(self), получается что функцией getattr мы пытаемся получить значение атрибута, но это не просто атрибут, это копия класса QLineEdit, которая не имеет как такого значения, а нужно вернуть текст введенный в строке, с помощью метода text(). Ну в общем не знаю правильно ли я и понятно объясняю, но функция getattr тут, наверное не подходит. Результат всего этого следующий :

{'line5': ‘', ’textEdit1': None, ‘comboBox1’: None, ‘line2’: ‘', ’textEdit2': None, ‘comboBox4’: None, ‘line4’: ‘', ’comboBox3': None, ‘comboBox2’: None, ‘line7’: None, ‘line6’: ‘', ’line3': ‘', ’line1': ''}

То есть все те индексы line, которые должны быть заполнены, они пустые.
Надо было, наверное, сразу про QLineEdit написать), просто не хотел в дебри лезть. Думал есть простое и быстрое решение, видимо не все так просто)
Может быть я зря зациклился на словаре и можно эти данные как-то по другому сохранить?)
JOHN_16
babai
for i in range(49, 55):
(“line%c” % i)
Это что еще за выдающийся говнокод? Надо хотя бы так:
for i in range(1,7):
    'line%s' % i
Все ваши дальнейший рассуждения это кладясь ляпов.
babai
tmp_per = getattr(c, (“line%c” % i))
для объекта “с” “line1” будет как раз таки атрибутом, если он разумеется там присутствует. То что сам по себе line1 тоже объект со своими атрибутами и методами - не важно. В переменной tmp_per запишется ссылка на этот объект. В дальнейшем происходит вызов метода text(). Судя по вашим результатам text() вернул пустую строку. Возможно вы ее банально не заполнили?
babai
for i in range(1,7):
    'line%s' % i
Так я тоже делал))) Это я уже просто эксперементировал как мог))) Тут разницы особой нет)
Строки я конечно же заполнял, чтож я по вашему до этого не додумался, чтобы строки заполнить?))))
Я конечно новичек в этом деле, но не настолько, чтоб строки забыть заполнить. Не работает тут функция getattr.) Так как как значение у атрибута self.line1 к примеру, равно QtGui.QLineEdit(self)? А мне нужно вывести не его значение, то что записанно в строке класса QLineEdit (он же self.line1). Поэтому если к примеру в цикл вставить строчку с оператором print:
for i in range(49, 55):
            tmp_per = getattr(c, ("line%c" % i))
            print(tmp_per)
            sql_per["line%c" % i] = tmp_per.text()

То вот что он выдает:
<PyQt4.QtGui.QLineEdit object at 0x027468A0>

Специально для Вас разжувал)
JOHN_16
babai
Ну все правильно. В переменной tmp_per содержится экземпляр класса QLineEdit, соответствующий в определенный момент , например, self.line1. Вот теперь в конце добавьте еще строчку кода и увидите содержимое виджета
print(tmp_per.text())
Я вполне допускаю что у вас результат не сходится с ожиданием из за проблем в другом участке кода.
FishHook
Ты какой-то бред несешь несусветный. Какие к черту “строки класса”?
Разжувал он. Непонятно, тебе то до какой каши надо разжевывать? Атрибут любого объекта будь то поле или метод можно получить функцией getattr, что тут непонятного?
Сделай простой класс с несколькими полями и методами и поэкспериментируй.
babai
Нет ))
print(tmp_per.text())

Вылезает пустая строка))) Просто пустота)
JOHN_16
или даже наглядности в внутренней точки зрения
repr(tmp_per.text())
babai
Может быть и бред пишу) Я не спорю, только въезжаю в это все) Поэтому помощи и прошу. Сейчас скину полностью код, посмотрите. Подредактирую только чуток его.
babai
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
class AddWindow(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.setWindowTitle("Добавить новый ")
        self.setFixedSize(400, 550)
        self.label1 = QtGui.QLabel("Дата покупки", self)
        self.label1.setGeometry(10, 40, 81, 20)
        self.line1 = QtGui.QLineEdit(self)
        self.line1.setGeometry(100, 40, 113, 20)
        self.label2 = QtGui.QLabel("Модель", self)
        self.label2.setGeometry(225, 40, 61, 20)
        self.comboBox1 = QtGui.QComboBox(self)
        self.comboBox1.setGeometry(283, 40, 101, 22)
        self.comboBox1.addItem("0 GPRS")
        self.comboBox1.addItem("i220")
        self.comboBox1.addItem("i20 GPRS")
        self.comboBox1.addItem("50 GPRS")
        self.label3 = QtGui.QLabel("Серийный номер", self)
        self.label3.setGeometry(10, 80, 101, 16)
        self.line2 = QtGui.QLineEdit(self)
        self.line2.setGeometry(100, 80, 281, 20)
        self.label4 = QtGui.QLabel("Версия ОС", self)
        self.label4.setGeometry(10, 120, 61, 20)
        self.comboBox2 = QtGui.QComboBox(self)
        self.comboBox2.setGeometry(100, 120, 91, 22)
        self.comboBox2.addItem("8.2n")
        self.comboBox2.addItem("9.8")
        self.label5 = QtGui.QLabel("Версия ПО", self)
        self.label5.setGeometry(210, 120, 61, 16)
        self.comboBox3 = QtGui.QComboBox(self)
        self.comboBox3.setGeometry(280, 120, 101, 22)
        self.comboBox3.addItem("ow 4.0.2.66bc")
        self.comboBox3.addItem("ow 4.0.2.143bc")
        self.comboBox3.addItem("ow 4.0.2.309bc")
        self.label6 = QtGui.QLabel("Организация", self)
        self.label6.setGeometry(10, 160, 71, 16)
        self.line3 = QtGui.QLineEdit(self)
        self.line3.setGeometry(100, 160, 281, 20)
        self.label7 = QtGui.QLabel("Место установки", self)
        self.label7.setGeometry(10, 200, 91, 16)
        self.textEdit1 = QtGui.QTextEdit(self)
        self.textEdit1.setGeometry(110, 200, 271, 64)
        self.label8 = QtGui.QLabel("Примечание", self)
        self.label8.setGeometry(10, 280, 81, 16)
        self.textEdit2 = QtGui.QTextEdit(self)
        self.textEdit2.setGeometry(110, 280, 271, 91)
        self.label9 = QtGui.QLabel("Стоимость фактическая", self)
        self.label9.setGeometry(10, 390, 131, 16)
        self.line4 = QtGui.QLineEdit(self)
        self.line4.setGeometry(140, 390, 101, 20)
        self.label10 = QtGui.QLabel("Стоимость балансовая", self)
        self.label10.setGeometry(10, 420, 121, 16)
        self.line5 = QtGui.QLineEdit(self)
        self.line5.setGeometry(140, 420, 101, 20)
        self.label11 = QtGui.QLabel("Номер телефона SIM-карты", self)
        self.label11.setGeometry(10, 450, 151, 16)
        self.line6 = QtGui.QLineEdit(self)
        self.line6.setGeometry(160, 450, 201, 20)
        self.label12 = QtGui.QLabel("Сертификат", self)
        self.label12.setGeometry(10, 480, 91, 16)
        self.line7 = QtGui.QLineEdit(self)
        self.line7.setGeometry(100, 480, 61, 20)
        self.label13 = QtGui.QLabel("Статус ", self)
        self.label13.setGeometry(170, 480, 101, 16)
        self.comboBox4 = QtGui.QComboBox(self)
        self.comboBox4.setGeometry(270, 480, 111, 22)
        self.comboBox4.addItem("Установлен ")
        self.comboBox4.addItem("Склад ")
        self.Button1 = QtGui.QPushButton("Сохранить", self)
        self.Button1.setGeometry(80, 520, 75, 23)
        self.Button2 = QtGui.QPushButton("Отмена", self)
        self.Button2.setGeometry(260, 520, 75, 23)
        #Отклик на кнопки
        self.connect(self.Button1, QtCore.SIGNAL("clicked()"),
                     self.save_info)
        self.connect(self.Button2, QtCore.SIGNAL("clicked()"),
                     self, QtCore.SLOT("close()"))
    def save_info(self):
        c = AddWindow()
        sql_per =dict.fromkeys(["line1", "comboBox1", "line2", "comboBox2", "comboBox3",
                  "line3", "textEdit1", "textEdit2", "line4", "line5",
                  "line6", "line7", "comboBox4"])
        for i in range(49, 55):
            tmp_per = getattr(c, ("line%c" % i))
            print(tmp_per.text())
            sql_per["line%c" % i] = tmp_per.text()
        








This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB