Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 11.05.2019
Сообщений: 49
PyQt5

Простой опрос с Python GUI

26.11.2019, 10:41. Показов 4847. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, господа программисты)
Объясните пожалуйста мне, недалекой, где я в логике допустила ошибку.
Вот модуль, запускающий программу.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from gui import Ui_Dialog 
from gui2 import Ui_MainWindow
 
app = QtWidgets.QApplication(sys.argv)
 
MainWindow = QtWidgets.QMainWindow()
ui1 = Ui_MainWindow()
ui1.setupUi(MainWindow)
MainWindow.show()
 
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.hide()
 
 
def start():
    print (" start")
    Dialog.show()
    MainWindow.hide()
    smena_que("vopros 1", "otvet a", "otvet b", "otvet c", "otvet d")
 
def obnull():
    ui.checkBox.setChecked(False) 
    ui.checkBox_2.setChecked(False)
    ui.checkBox_3.setChecked(False) 
    ui.checkBox_4.setChecked(False) 
 
def chel_nazhal():
    print("chel_nazhal")
    print(ui.label.text())
 
    if ui.label.text() == "vopros 1":
        next_def = smena_que("vopros 2", "otvet b", "otvet a", "otvet c", "otvet d")
        cha = ui.checkBox
        proverka(cha, next_def)
        obnull()  
    elif ui.label.text() == "vopros 2":
        next_def = smena_que("vopros 3", "otvet c", "otvet b", "otvet a", "otvet d")
        cha = ui.checkBox_2
        proverka(cha, next_def)
        obnull()  
    elif ui.label.text() == "vopros 3":
        next_def = smena_que("vopros 4", "otvet d", "otvet b", "otvet c", "otvet a")
        cha = ui.checkBox_3
        proverka(cha, next_def)  
        obnull()
    elif ui.label.text() == "vopros 4":
        next_def = smena_que("vopros 5", "otvet a", "otvet b", "otvet c", "otvet d")
        cha = ui.checkBox_4
        proverka(cha, next_def)
        obnull()  
    elif ui.label.text() == "vopros 5":
        next_def = smena_que("vopros 6", "otvet b", "otvet a", "otvet c", "otvet d")
        cha = ui.checkBox
        proverka(cha, next_def)
        obnull()  
 
    
 
 
def proverka(cha, next_def):
    print ("proverka")
    i = 0
    if cha.isChecked() == True:
        i += 1
        print(str(i) + "posle")
        next_def
    elif ui.checkBox.isChecked() != True and ui.checkBox_2.isChecked() != True and ui.checkBox_3.isChecked() != True and ui.checkBox_4.isChecked() != True  :
        pass
 
 
def smena_que(que, a, b, c, d):
    ui.label.setText(que)
    ui.checkBox.setText(a)  
    ui.checkBox_2.setText(b)
    ui.checkBox_3.setText(c)
    ui.checkBox_4.setText(d) 
    ui.pushButton.clicked.connect(chel_nazhal)
 
 
 
ui1.pushButton.clicked.connect(start)
 
 
 
sys.exit(app.exec_())
Вот стартовый экран
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'gui2.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
 
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(547, 340)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(140, 60, 291, 181))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(22)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 547, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "START"))
Вот модуль, с которым в основном взаимодействует пользователь.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'gui.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
 
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(631, 481)
        self.verticalLayoutWidget = QtWidgets.QWidget(Dialog)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(50, 80, 421, 331))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.checkBox = QtWidgets.QCheckBox(self.verticalLayoutWidget)
        self.checkBox.setObjectName("checkBox")
        self.verticalLayout.addWidget(self.checkBox)
        self.checkBox_2 = QtWidgets.QCheckBox(self.verticalLayoutWidget)
        self.checkBox_2.setObjectName("checkBox_2")
        self.verticalLayout.addWidget(self.checkBox_2)
        self.checkBox_3 = QtWidgets.QCheckBox(self.verticalLayoutWidget)
        self.checkBox_3.setObjectName("checkBox_3")
        self.verticalLayout.addWidget(self.checkBox_3)
        self.checkBox_4 = QtWidgets.QCheckBox(self.verticalLayoutWidget)
        self.checkBox_4.setObjectName("checkBox_4")
        self.verticalLayout.addWidget(self.checkBox_4)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(24, 26, 521, 21))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(160, 430, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.label.raise_()
        self.verticalLayoutWidget.raise_()
        self.pushButton.raise_()
 
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
 
    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.checkBox.setText(_translate("Dialog", "CheckBox"))
        self.checkBox_2.setText(_translate("Dialog", "CheckBox"))
        self.checkBox_3.setText(_translate("Dialog", "CheckBox"))
        self.checkBox_4.setText(_translate("Dialog", "CheckBox"))
        self.label.setText(_translate("Dialog", "TextLabel"))
        self.pushButton.setText(_translate("Dialog", "Poleteli"))
По моей логике после нажатия на чек бокс и кнопки Полетели программа должна отображать следующий вопрос и ответы на него, но идет 1 вопрос, потом 2, потом, почему - то 4 и следующий 6. Я знаю, что использую много elif и программа может их игнорировать, но не пойму почему так выборочно?
Может кто сталкивался и знает как решить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2019, 10:41
Ответы с готовыми решениями:

Простой опрос с Python GUI
Добрый день, форумчане. Начала изучать PyQt5 и решила создать простой опрос с интерфейсом. Если ответ верный - +1 балл пользователю и...

простой опрос
здравствуйте* как сделать простой опрос например есть вопрос и три варианта ответа если выбрали правильный выходит окошечко что правильный...

Простой опрос кнопки, но не работает
#define F_CPU 8000000L #include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <avr/interrupt.h> int...

7
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
26.11.2019, 21:33
Вот тут

Python
1
2
3
4
5
6
7
def smena_que(que, a, b, c, d):
    ui.label.setText(que)
    ui.checkBox.setText(a)  
    ui.checkBox_2.setText(b)
    ui.checkBox_3.setText(c)
    ui.checkBox_4.setText(d) 
    ui.pushButton.clicked.connect(chel_nazhal)
У вас кнопка одна и та же, а вы на нее дополнительный слот каждый раз привязываете и они все отрабатывают
1
0 / 0 / 0
Регистрация: 11.05.2019
Сообщений: 49
27.11.2019, 12:48  [ТС]
Дополнительный слот, в смысле ui.pushbutton.clicked.connect?
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
27.11.2019, 19:08
Цитата Сообщение от kira_sisad Посмотреть сообщение
Дополнительный слот, в смысле ui.pushbutton.clicked.connect?
Да, именно это
1
0 / 0 / 0
Регистрация: 11.05.2019
Сообщений: 49
27.11.2019, 19:10  [ТС]
Хорошо, а как же тогда лучше сделать переход на следующую функцию?
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
27.11.2019, 19:52
Цитата Сообщение от kira_sisad Посмотреть сообщение
Хорошо, а как же тогда лучше сделать переход на следующую функцию?
Просто вынесите из функции

Python
1
2
3
4
5
6
7
8
9
def smena_que(que, a, b, c, d):
    ui.label.setText(que)
    ui.checkBox.setText(a)  
    ui.checkBox_2.setText(b)
    ui.checkBox_3.setText(c)
    ui.checkBox_4.setText(d) 
 
ui.pushButton.clicked.connect(chel_nazhal)
ui1.pushButton.clicked.connect(start)
1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
29.11.2019, 10:09
Эх, учишь вас, учишь, всё без толку. Я же говорил избавиться об глобалок. Так вы запутаетесь в логике, уже начали.
0
0 / 0 / 0
Регистрация: 11.05.2019
Сообщений: 49
29.11.2019, 10:59  [ТС]
Неа, не запутаюсь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2019, 10:59
Помогаю со студенческими работами здесь

Быстрый опрос датчиков по UART, настройка через WEB GUI, сервер
Есть куча датчиков с нестандартным протоколом. Датчики с разными адресами сидят на шине RS485 и ждут когда к ним обратится мастер. Интервал...

Простой GUI
Здравствуйте! Уже давно пользуюсь самописным проигрывателем для музыки, есть проблема - нету кнопок управления. Сейчас как временное...

Простой GUI
Совсем не сильна в Javа,но нужно сдать хоть что-то. Помогите исправить код,в eclipse выдает кучу ошибок. Можно без сжатия и фильтрации....

Статистика по программистам python: предлагаю опрос
вопросы

Разработать простой чат с GUI
Здравствуйте! очень прошу, помогите решить задачу "Разработайте простой чат с графическим интерфейсом пользователя, в котором и сервер и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru