我计划在程序中包含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')
感谢
圣牛。你不是真的那样把对话框链接起来,是吗?尝试回答您的问题:
- 这最终会导致崩溃吗:这段代码应该在有人单击"否"后的第一个
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,因为看起来您正在使用多行字符串来创建空白(?)。