Анкета программы с помощью многих wxPython, в окна


У меня более 300 вопросов, которые я планирую включить в программу. Поток очень похож на этот:

  • Создать окно с вопросом
  • Хранить его в переменной
  • Создать новое окно С вопрос
  • Магазин новый ответ

(Это продолжается на протяжении более 300 вопросов.)

У меня 2 вопроса:

  1. Это в конечном итоге приведет к краху, поскольку я создаю так много окон?
  2. Все работает с этим кодом, если вы выберите " Да "на второй вопрос (А2), но это не работает, если вы выберите "Нет". Вы можете, пожалуйста, посмотреть, если вы можете найти то, что случилось с ним?
import wx

a1 = ['Apples', 'Bananas', 'Strawberries', 'Watermelon',
     "Don't remember", 'None of the above']

a2 = ['No', 'Yes']

a4 = ['No', 'Yes']


class Fruit(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, 'Fruit', size=(300,200))

        #create panel and button
        panel = wx.Panel(self)

        # B1 - create multiple choice list
        box = wx.MultiChoiceDialog(None, """

A1.    What kind of fruit did you buy at the store?""", 'Fruit', a1)
        if box.ShowModal() == wx.ID_OK:
            a_1 = box.GetSelections()


        print (a_1, '\n')

        # A2 - create single choice list
        box = wx.SingleChoiceDialog(None, """
A2.    Do you like eating fruit?
""", 'Fruit', a2)
        if box.ShowModal() == wx.ID_OK:
            a_2 = box.GetStringSelection()

        print (a_2, '\n')

        if a_2 == 'Yes':
            box = wx.TextEntryDialog(None, "A3.    What kind of fruit is your favorite? ", "Fruit", "")
        if box.ShowModal() == wx.ID_OK:
            a_3 = box.GetValue()

        print (a_3, '\n')


        box = wx.SingleChoiceDialog(None, """
A4.    Did you eat the fruit that you bought?
""", 'Fruit', a4)
        if box.ShowModal() == wx.ID_OK:
            a_4 = box.GetStringSelection()

        print (a_4, '\n')


398
2
задан 6 июня 2011 в 10:06 Источник Поделиться
Комментарии
1 ответ

import wx

a1 = ['Apples', 'Bananas', 'Strawberries', 'Watermelon',
"Don't remember", 'None of the above']

a2 = ['No', 'Yes']

a4 = ['No', 'Yes']

Руководство по стилю Python рекомендую, что написано заглавными_буквами для глобальных констант.

class Fruit(wx.Frame):

def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, 'Fruit', size=(300,200))

#create panel and button
panel = wx.Panel(self)

# B1 - create multiple choice list
box = wx.MultiChoiceDialog(None, """

A1. What kind of fruit did you buy at the store?""", 'Fruit', a1)

Когда струны достаточно долго, что они сила, разбив на несколько строк, его как правило, лучше, чтобы переместить их в глобальные константы

        if box.ShowModal() == wx.ID_OK:
a_1 = box.GetSelections()

print (a_1, '\n')

Я не думаю, что это делает то, что вы думаете. Для Python 2.X (которая если wxPython, в был портирован на Python 3.х в последнее время, должно быть то, что вы используете), вы не должны поставить скобки вокруг вашей печати заявления.

            # A2 - create single choice list
box = wx.SingleChoiceDialog(None, """
A2. Do you like eating fruit?
""", 'Fruit', a2)
if box.ShowModal() == wx.ID_OK:
a_2 = box.GetStringSelection()

print (a_2, '\n')

if a_2 == 'Yes':
box = wx.TextEntryDialog(None, "A3. What kind of fruit is your favorite? ", "Fruit", "")
if box.ShowModal() == wx.ID_OK:

Если ответ на предыдущий вопрос был "да", то поле сейчас результат задавая вопрос А3. Однако, в противном случае ее еще на предыдущий вопрос. В результате, он снова задать тот же вопрос. Вы, вероятно, хотите, чтобы отступ это, если заблокировать, так что это происходит только если а_2 был да.

            a_3 = box.GetValue()

print (a_3, '\n')

box = wx.SingleChoiceDialog(None, """
A4. Did you eat the fruit that you bought?
""", 'Fruit', a4)
if box.ShowModal() == wx.ID_OK:
a_4 = box.GetStringSelection()

print (a_4, '\n')

Что касается ваших вопросов:


  1. Вы, вероятно, может уйти с создания, что многие окна. Однако, вы можете убедиться в том, что диалог разрушается путем вызова destroy() метод.

  2. Я объяснил выше, что случилось с вашей логикой.

3
ответ дан 6 июня 2011 в 11:06 Источник Поделиться