Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 30, 2017 16:17:24

ashimano
Зарегистрирован: 2016-06-07
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с checkbox'ами и циклом

Здравствуйте. В своей программе я создаю ряд чекбоксов и присваиваю им какие - нибудь весовые значения. Если сумма этих весовых значений будет превышать определенное число, мне должна программа выдавать одно сообщение, если нет - другое.
Помогите решить: Когда я выбираю “Пункт 12” (имеет весовое значение 12) мне выдает “Сообщение №2”, а должен “Сообщение №1” подскажите мне, что не правильно в моем коде.
Пример:

 import sys
from PyQt5 import  QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtWidgets import QMainWindow, QLabel, QCheckBox
from PyQt5.QtCore import QCoreApplication
class Base(QtWidgets.QWidget):
    def __init__(self):
        super(Base, self).__init__()
        self.startUW()
    def startUW(self):
        self.vbox = QtWidgets.QVBoxLayout()
        self.checkboxItem()
        self.vbox.addStretch(1)
        button = QtWidgets.QPushButton("Show", self)
        button.clicked.connect(self.showItem)
        self.lab = QtWidgets.QLabel("Выберите Пункт", self)
  
        self.vbox.addWidget(button, 3)
        self.vbox.addWidget(self.lab, 4)
        self.setWindowTitle("My_first_programm")
        self.setWindowIcon(QtGui.QIcon('pythonlogo.png'))
        self.setGeometry(50, 50, 1000, 600)
        self.setLayout(self.vbox)
        self.show()
    def checkboxItem(self):
        array = ["Пунтк 1",
                 "Пункт 2",
                 "Пункт 3",
                 "Пункт 4",
                 "Пунтк 5",
                 "Пункт 6",
                 "Пункт 7",
                 "Пункт 8",
                 "Пунтк 9",
                 "Пункт 10",
                 "Пункт 11",
                 "Пункт 12"]
        self.check = []
        index = 0
        
        for item_name in array:
            self.check.append(QtWidgets.QCheckBox(item_name, self))
            self.vbox.addWidget(self.check[index], index)
            index += 1
    def showItem(self):
        values = [1,2,3,4,5,6,7,8,9,10,11,12]
        sum_of_values = 0
        index = 0
        while index != 12:
            if self.check[index].isChecked():     
                sum_of_values += values[index]
                index += 1
            elif sum_of_values > 7:
                self.lab.setText('Сообщение №1')
                break
            else:
                index += 1
            self.lab.setText('Сообщение №2')
def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = Base()
    sys.exit(app.exec_())
if __name__ == "__main__":
    main()

Офлайн

#2 Дек. 30, 2017 16:35:40

g
Зарегистрирован: 2017-12-29
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с checkbox'ами и циклом

ashimano
Человек, который только начинает постигать искусство программирования, в первую очередь должен научиться запускать программу “по шагам”. Иначе не будет вообще никакого понимания, почему программа работает, или почему не работает.


Не запускал, но навскидку,

      while index != 12:
            if self.check[index].isChecked():     
                sum_of_values += values[index]
                # index += 1 - зачем вы это в if вставили?
            index += 1
      if sum_of_values > 7:
            self.lab.setText('Сообщение №1')
      else:
            self.lab.setText('Сообщение №2')  


Отредактировано g (Дек. 30, 2017 16:37:17)

Офлайн

#3 Дек. 30, 2017 16:40:27

ashimano
Зарегистрирован: 2016-06-07
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с checkbox'ами и циклом

Так у меня программа просто вылетает при выборе пункта №12

Офлайн

#4 Дек. 30, 2017 17:00:58

g
Зарегистрирован: 2017-12-29
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с checkbox'ами и циклом

ashimano
Запустил ваше детище. С правками, которые описал выше.
Щелкаю пункт 12 - ничего не вылетает. Выводит “сообщение №1”
Давайте еще раз свой код с правками, которые вы добавили.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version