Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2016 10:26:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с переменными

babai
Или может я чайник чего-то не так делаю?
Ты чайник и не то делаешь
for i in range(49, 55):
    obj = getattr(c, "line%s" % i)
    sql_per["line%s" % i] = obj.text()



Отредактировано FishHook (Янв. 12, 2016 10:27:02)

Офлайн

#2 Янв. 13, 2016 01:50:34

babai
Зарегистрирован: 2015-12-25
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с переменными

Классно все написал, спасибо и про чайник и про дополнительную переменную)) и даже это отрабатывает без ошибок, только вот не правильно отрабатывает))) Видишь ли, что получается:

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 написать), просто не хотел в дебри лезть. Думал есть простое и быстрое решение, видимо не все так просто)
Может быть я зря зациклился на словаре и можно эти данные как-то по другому сохранить?)

Офлайн

#3 Янв. 13, 2016 04:23:41

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите с переменными

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() вернул пустую строку. Возможно вы ее банально не заполнили?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Янв. 13, 2016 06:12:28

babai
Зарегистрирован: 2015-12-25
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с переменными

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>

Специально для Вас разжувал)

Офлайн

#5 Янв. 13, 2016 06:23:02

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите с переменными

babai
Ну все правильно. В переменной tmp_per содержится экземпляр класса QLineEdit, соответствующий в определенный момент , например, self.line1. Вот теперь в конце добавьте еще строчку кода и увидите содержимое виджета

print(tmp_per.text())
Я вполне допускаю что у вас результат не сходится с ожиданием из за проблем в другом участке кода.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Янв. 13, 2016 06:29:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с переменными

Ты какой-то бред несешь несусветный. Какие к черту “строки класса”?
Разжувал он. Непонятно, тебе то до какой каши надо разжевывать? Атрибут любого объекта будь то поле или метод можно получить функцией getattr, что тут непонятного?
Сделай простой класс с несколькими полями и методами и поэкспериментируй.



Офлайн

#7 Янв. 13, 2016 06:30:00

babai
Зарегистрирован: 2015-12-25
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с переменными

Нет ))

print(tmp_per.text())

Вылезает пустая строка))) Просто пустота)

Офлайн

#8 Янв. 13, 2016 06:30:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите с переменными

или даже наглядности в внутренней точки зрения

repr(tmp_per.text())



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Янв. 13, 2016 06:36:09

babai
Зарегистрирован: 2015-12-25
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с переменными

Может быть и бред пишу) Я не спорю, только въезжаю в это все) Поэтому помощи и прошу. Сейчас скину полностью код, посмотрите. Подредактирую только чуток его.

Офлайн

#10 Янв. 13, 2016 06:39:02

babai
Зарегистрирован: 2015-12-25
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с переменными

# -*- 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()
        








Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version