Добрый день. Пишу программку-викторину. Хочу реализовать переходы по вопросам, но окно программы у меня одно, и кнопку тоже одни, в итоге после пару нажатий сигналы вызывают все подряд. Руками не дисконектится. Пишу на PyQt4. Но если вы подскажите как в обычном Qt автоматом дисконнектить, думаю на PyQt я переведу.
вот код:
Python
#!/usr/bin/python
# -*- coding: utf-8 -*-
import string
from os import system
from PyQt4 import QtCore,QtGui, uic
#### не забудь при вызове одной функции ставить фолсы на все остальные
name = u'00000000'
isOkConnecked=[False]*4
isPrevConnecked=[False]*4
class MainWindow(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self,parent)
Form, base=uic.loadUiType("MyUi.ui")
self.ui=Form()
self.ui.setupUi(self)
#################################
self.setWindowTitle(u"Эрудит")
self.setWindowIcon(QtGui.QIcon('/usr/share/icons/unity-icon-theme/apps/128/work.svg'))
self.ui.Pic.hide()
self.ui.time.hide()
self.ui.ans_a.hide()
self.ui.ans_b.hide()
self.ui.ans_c.hide()
self.ui.bar.hide()
self.ui.prev.hide()
#self.ui.debug.hide()
self.ui.ok.setDisabled(True)
h1 = u'Это программа-тестер. Узнайте насколько вы хороший эрудит.'
h2=h1+u'<br>Введите свое имя, чтобы приступить к тесту'
hello = u'<center><b>'+h2+u"</b></center>"
self.ui.ask.setText(hello)
self.ui.skip.setText(u"Ввести имя")
self.ui.ok.setText(u"Начать")
self.ui.skip.clicked.connect(self.sName)
self.ui.debug.clicked.connect(self.debug)
self.ui.ans_a.clicked.connect(self.onlya)
self.ui.ans_b.clicked.connect(self.onlyb)
self.ui.ans_c.clicked.connect(self.onlyc)
#################################
def debug(self):
print 'isOkConnecked',isOkConnecked
print 'isPrevConnecked',isPrevConnecked
def onlya(self):
self.ui.ans_b.setChecked(False)
self.ui.ans_c.setChecked(False)
def onlyb(self):
self.ui.ans_a.setChecked(False)
self.ui.ans_c.setChecked(False)
def onlyc(self):
self.ui.ans_b.setChecked(False)
self.ui.ans_a.setChecked(False)
def sName(self):
global isPrevConnecked,isOkConnecked,name
text, ok= QtGui.QInputDialog.getText(self, u'Имя',u'Введите Ваше имя:')
if ok and not text.isEmpty():
self.ui.ok.setDisabled(False)
name =text
self.ui.ok.clicked.connect(self.goq1)
isOkConnecked[0]=True
def goq1(self):
global isPrevConnecked,isOkConnecked
if isOkConnecked[0] or isPrevConnecked[0]:
self.debug
self.q1()
isOkConnecked[0]=False
isPrevConnecked[0]=False
def goq2(self):
global isPrevConnecked,isOkConnecked
if isOkConnecked[1] or isPrevConnecked[1]:
self.debug
self.q2()
isOkConnecked[1]=False
isPrevConnecked[1]=False
def goq3(self):
global isPrevConnecked,isOkConnecked
if isOkConnecked[2] or isPrevConnecked[2]:
self.debug
self.q3()
isOkConnecked[2]=False
isPrevConnecked[2]=False
def goq4(self):
global isPrevConnecked,isOkConnecked
if isOkConnecked[3] or isPrevConnecked[3]:
self.debug
self.q4()
isOkConnecked[3]=False
isPrevConnecked[3]=False
def q1(self):
global isPrevConnecked,isOkConnecked
print 'q1'
string=u'<center><b>Где находится это сооружение?<b></center>'
self.setAskUi(string,u"В Барселоне",u"В Киеве",u"В Париже","1.jpg",1)
self.ui.ok.clicked.connect(self.goq2)
isOkConnecked[1]=True
def q2(self):
global isPrevConnecked,isOkConnecked
print 'q2'
string = u'<center><b>Какая фамилия этого поэта?<b></center>'
self.setAskUi(string,u"Грибоедов",u"Пушкин",u"Гоголь","2.jpg",2)
self.ui.prev.clicked.connect(self.goq1)
isPrevConnecked[0]=True
self.ui.ok.clicked.connect(self.goq3)
isOkConnecked[2]=True
def q3(self):
global isPrevConnecked,isOkConnecked
print 'q3'
string = u'<center><b>Как называется это<br>природное явление?<b></center>'
self.setAskUi(string,u"Лавина",u"Торнадо",u"Сель","3.jpg",3)
self.ui.prev.clicked.connect(self.goq2)
isPrevConnecked[1]=True
self.ui.ok.clicked.connect(self.goq4)
isOkConnecked[3]=True
def q4(self):
global isPrevConnecked,isOkConnecked
print 'q4'
string = u'<center><b>Кто вывел эту формулу?<b></center>'
self.setAskUi(string,u"Ницше",u"Ленин",u"Энштейн","4.jpg",4)
self.ui.prev.clicked.connect(self.goq3)
isPrevConnecked[2]=True
def setAskUi(self,text,aa,ab,ac,img,i):
self.ui.skip.setText(u'Пропустить')
self.ui.ok.setText(u'Ответить')
self.ui.bar.show()
self.ui.ans_a.show()
self.ui.ans_b.show()
self.ui.ans_c.show()
self.ui.prev.show()
if i == 1:
self.ui.prev.setDisabled(True)
else:
self.ui.prev.setDisabled(False)
if i ==15:
self.ui.ok.setText(u'Завершить')
self.ui.Pic.show()
self.ui.skip.show()
self.ui.ok.show()
self.ui.bar.setValue(i)
askStr = u'<center><b>'+text+'<b></center>'
self.ui.ask.setText(askStr)
self.ui.ans_a.setText(aa)
self.ui.ans_b.setText(ab)
self.ui.ans_c.setText(ac)
self.scene = QtGui.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(img))
self.ui.Pic.setScene(self.scene)
self.ui.Pic.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.ui.Pic.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win=MainWindow()
win.show()
sys.exit(app.exec_())
ну и MyUi.ui:
XML
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>618</width>
<height>382</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>618</width>
<height>382</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>618</width>
<height>382</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QGraphicsView" name="Pic">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="ask">
<property name="minimumSize">
<size>
<width>300</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="time">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QVBoxLayout" name="box">
<item>
<widget class="QCheckBox" name="ans_a">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="ans_b">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="ans_c">
<property name="text">
<string>CheckBox</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QProgressBar" name="bar">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>4</number>
</property>
<property name="value">
<number>1</number>
</property>
<property name="format">
<string>%v/%m</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="debug">
<property name="text">
<string>debug</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QPushButton" name="prev">
<property name="text">
<string>Предыдущий</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="skip">
<property name="text">
<string>Пропустить</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="ok">
<property name="text">
<string>Ответить</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
<tabstop>ok</tabstop>
<tabstop>Pic</tabstop>
</tabstops>
<resources/>
<connections/>
<designerdata>
<property name="gridDeltaX">
<number>10</number>
</property>
<property name="gridDeltaY">
<number>10</number>
</property>
<property name="gridSnapX">
<bool>true</bool>
</property>
<property name="gridSnapY">
<bool>true</bool>
</property>
<property name="gridVisible">
<bool>true</bool>
</property>
</designerdata>
</ui>
В коде просто русский текст, того оно так и отобразило на форуме.