我计划在计划中包含300多个问题/提示。流程非常类似:
创建一个包含问题的窗口。 将答案存储在变量中。 创建带有问题的新窗口。 存储新答案。
继续讨论超过300个问题。
我有两个问题:
1)这会导致崩溃,因为我正在创建这么多窗口
2)如果您对第二个问题(A2)选择“是”,则所有内容都适用于此代码,但如果选择“否”则不起作用。你能不能看看你能找到它的错误吗?
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')
由于
答案 0 :(得分:3)
圣牛。你不是真的在链接那些对话框,不是吗?试着回答你的问题:
print
失败。参见项目符号#2。这里有很多遗漏,我没有看到任何错误处理,没有__main__
,错过了App()
等等。因为你反复重新分配box
的价值我不认为你可能会遇到内存问题,但在这个阶段你最关心的是这些问题。如果您单击是,则一切正常,但如果您单击否,则会失败:这来自此box.ShowModal() == wx.ID_OK
。如果从对话框中获得OK值,则只创建变量a_#
。你可以这样做:
a_1 = box.getSelections() if box.ShowModal() == wx.ID_OK else None
在这里你可以用None
代替一些有意义的值。注意,它使用的是Python三元语法,它是在2.5或2.6中引入的。它不适用于2.4。
所有这一切,你可能想要创建的是一个向导。它们“通常用于将复杂的对话分解为几个简单的步骤”。这里有一个可以在wxWidgets获得的教程,可能会有所启发。一旦你看了一下,你应该调查sizer,因为看起来你正在使用多行字符串来创建空格(?)。