Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 18, 2017 16:32:30

IrishkaZem
Зарегистрирован: 2017-01-18
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Python, PyQt, классы. Вывод переменной

Здравствуйте! Подскажите, пожалуйста. Возник такой вопрос. В классе, в функции, отвечающей за ввод диалога переменной присваивается введённое значение. Но, получается, что это значение не записывается. Непонятно, почему. Можете подсказать? Программа рабочая, но некорректно выдаёт значения а и b

 from PyQt4 import QtCore, QtGui
import sys
class ModalWind(QtGui.QWidget):
    def __init__(self, parent=None):
        super(ModalWind, self).__init__(parent)
        self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowSystemMenuHint)
        self.setWindowModality(QtCore.Qt.WindowModal)
        self.setWindowTitle("Complete")
        self.resize(300, 100)
        self.lab = QtGui.QLabel('Данные введены!', self)
        butt_hide = QtGui.QPushButton('OK!')
        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(butt_hide)
        self.setLayout(vbox)
        butt_hide.clicked.connect(self.close)
class MainWind(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MainWind, self).__init__(parent)
        self.a = 0
        self.b = 0
        self.c = 1
        self.setWindowTitle('Выбор')
        self.setGeometry(500, 300, 350, 80)
        self.mainLayout = QtGui.QVBoxLayout(self)
        self.lab = QtGui.QLabel('Выберите', self)
        self.mainLayout.addWidget(self.lab)
        self.but1 = QtGui.QPushButton('1', self)
        self.but2 = QtGui.QPushButton('2', self)
        self.but3 = QtGui.QPushButton('3', self)
        self.mainLayout.addWidget(self.but1)
        self.mainLayout.addWidget(self.but2)
        self.mainLayout.addWidget(self.but3)
        self.connect(self.but1, QtCore.SIGNAL('clicked()'), self.Dialog1)
        self.connect(self.but1, QtCore.SIGNAL('clicked()'), self.close)
        self.connect(self.but1, QtCore.SIGNAL('clicked()'), self.on_show)
        self.connect(self.but2, QtCore.SIGNAL('clicked()'), self.Dialog2)
        self.connect(self.but2, QtCore.SIGNAL('clicked()'), self.close)
        self.connect(self.but2, QtCore.SIGNAL('clicked()'), self.on_show)
        self.connect(self.but3, QtCore.SIGNAL('clicked()'), self.Dialog3)
        self.connect(self.but3, QtCore.SIGNAL('clicked()'), self.close)
        self.connect(self.but3, QtCore.SIGNAL('clicked()'), self.on_show)
    def Dialog1(self):
        self.a, ok = QtGui.QInputDialog.getInteger(self, '1', 'Введите')
        if ok:
            self.b, ok = QtGui.QInputDialog.getInteger(self, '1', 'Введите')
            self.c=1
    def Dialog2(self):
        self.a, ok = QtGui.QInputDialog.getInteger(self, '2', 'Введите')
        if ok:
            self.b, ok = QtGui.QInputDialog.getInteger(self, '2', 'Введите')
            self.c = 2
    def Dialog3(self):
        self.a, ok = QtGui.QInputDialog.getInteger(self, '3', 'Введите')
        if ok:
            self.b, ok = QtGui.QInputDialog.getInteger(self, '3', 'Введите')
            self.c = 3
    def on_show(self):
        win = ModalWind(self)
        win.show()
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    win = MainWind()
    win.show()
############################## беда здесь, не выводит введённое значение, а выводит изначальное, т.е. 0
    print(win.a)
    sys.exit(app.exec_())

Отредактировано FishHook (Янв. 18, 2017 16:46:53)

Офлайн

#2 Янв. 18, 2017 17:00:39

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

Python, PyQt, классы. Вывод переменной

не могу понять логику происходящего

         self.connect(self.but1, QtCore.SIGNAL('clicked()'), self.Dialog1)
        self.connect(self.but1, QtCore.SIGNAL('clicked()'), self.close)
        self.connect(self.but1, QtCore.SIGNAL('clicked()'), self.on_show)

Вообще, вы совершаете давно знакомую ошибку. Вы еще плохо знаете используемую библиотеку, так зачем вы сразу пишете большую портянку, а потом гадаете, в каком конкретно месте не работает? Сделайте очень маленькую формочку, до предела минимальную, положите на не одну кнопку, присобачте к ней один обработчик одного события и смотрите дебаггером, что происходит. Получилось? Идем дальше…



Офлайн

#3 Янв. 18, 2017 18:23:26

xkbd
Зарегистрирован: 2017-01-18
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Python, PyQt, классы. Вывод переменной

Ты печатаешь переменную при старте программы, до ввода данных.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version