这最终是否会导致崩溃(wxpython)

时间:2011-06-06 22:38:14

标签: python user-interface wxpython

我计划在计划中包含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')

由于

1 个答案:

答案 0 :(得分:3)

圣牛。你不是真的在链接那些对话框,不是吗?试着回答你的问题:

  1. 这最终是否会导致崩溃:在有人点击否后,这段代码应该在第一个print失败。参见项目符号#2。这里有很多遗漏,我没有看到任何错误处理,没有__main__,错过了App()等等。因为你反复重新分配box的价值我不认为你可能会遇到内存问题,但在这个阶段你最关心的是这些问题。
  2. 如果您单击是,则一切正常,但如果您单击否,则会失败:这来自此box.ShowModal() == wx.ID_OK。如果从对话框中获得OK值,则只创建变量a_#。你可以这样做:

    a_1 = box.getSelections() if box.ShowModal() == wx.ID_OK else None

  3. 在这里你可以用None代替一些有意义的值。注意,它使用的是Python三元语法,它是在2.5或2.6中引入的。它不适用于2.4。

    所有这一切,你可能想要创建的是一个向导。它们“通常用于将复杂的对话分解为几个简单的步骤”。这里有一个可以在wxWidgets获得的教程,可能会有所启发。一旦你看了一下,你应该调查sizer,因为看起来你正在使用多行字符串来创建空格(?)。