0

だから私の問題は、ハンバーガーの価格を計算するGUIをwxpythonで作成する必要があるということです。各追加成分は1.55で、小価格は1.55、中価格は1.55+1.55などです。私の質問はこれです:ラジオボタンを割り当てるにはどうすればよいですか?たとえば、これを実行したい場合:ラジオボタン1が選択されている場合:これを実行します

チェックボックスの数と同じです。これまでの私のスクリプトはここにあります。

import wx

class Window(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(400, 250))
        self.title = title
        self.initGUI()

    def initGUI(self):
        # Set up the widgets for the GUI
        panel = wx.Panel(self, -1)
        self.amount = wx.StaticText(panel, -1, 'Ingredients = 0', pos=(10, 10))

        #                      Parent ID  Value         Position (Height, Width)
        self.cb1 = wx.CheckBox(panel, -1, 'Extra Patty', (10, 30))
        self.cb2 = wx.CheckBox(panel, -1, 'Cheese', (10, 50))
        self.cb3 = wx.CheckBox(panel, -1, 'Onions', (10, 70))
        self.cb4 = wx.CheckBox(panel, -1, 'Mushrooms', (10,90))
        # Register an event for each checkbox.
        self.Bind(wx.EVT_CHECKBOX, self.toggleIngredients, self.cb1)
        self.Bind(wx.EVT_CHECKBOX, self.toggleIngredients, self.cb2)
        self.Bind(wx.EVT_CHECKBOX, self.toggleIngredients, self.cb3)
        self.Bind(wx.EVT_CHECKBOX, self.toggleIngredients, self.cb4)
    self.rb1 = wx.RadioButton(panel, -1, 'Small', (200,30))
    self.rb2 = wx.RadioButton(panel, -1, 'Medium', (200,50))
    self.rb3 = wx.RadioButton(panel, -1, 'Large', (200, 70))

        self.Show()
        self.Centre()

    def toggleIngredients(self, event):
        self.ingredients = 0
        for cb in (self.cb1, self.cb2, self.cb3, self.cb4):
            if cb.IsChecked():
                self.ingredients += 1
        self.amount.SetLabel('Ingredients = ' + str(self.ingredients))

    if self.amount.SetLabel == '1':
        ing = 1
    if self.amount.SetLabel == '2':
        ing = 2
    if self.amount.SetLabel == '3':
        ing = 3
    if self.amount.SetLabel == '4':
        ing = 4


app = wx.App(False)
window = Window(None, 'CheckBox Example')
app.MainLoop()
4

1 に答える 1

0

UpdateCost メソッドを参照

    import wx

class Window(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(400, 250))
        self.title = title
        self.initGUI()

    def initGUI(self):
        # Set up the widgets for the GUI
        panel = wx.Panel(self, -1)
        self.amount = wx.StaticText(panel, -1, 'Ingredients = 0', pos=(10, 10))

        #                      Parent ID  Value         Position (Height, Width)
        self.cbs = [
                    wx.CheckBox(panel, -1, 'Extra Patty', (10, 30)),
                    wx.CheckBox(panel, -1, 'Cheese', (10, 50)),
                    wx.CheckBox(panel, -1, 'Onions', (10, 70)),
                    wx.CheckBox(panel, -1, 'Mushrooms', (10,90))
                    ]
        # Register an event for each checkbox.
        self.Bind(wx.EVT_CHECKBOX, self.toggleIngredients)
        self.radios = [
                    wx.RadioButton(panel, -1, 'Small', (200,30)),
                    wx.RadioButton(panel, -1, 'Medium', (200,50)),
                    wx.RadioButton(panel, -1, 'Large', (200, 70))
                    ]
        self.Bind(wx.EVT_RADIOBUTTON,self.toggleIngredients)
        self.Show()
        self.Centre()
    def UpdateCost(self):
        costs = {"Small":1.55,"Medium":3.10,"Large":4.65}
        base_cost = 0.00
        for r in self.radios:
            if r.GetValue():
                base_cost = costs[r.GetLabel()]
        additional_costs = sum([1.5 for x in self.cbs if x.GetValue()])
        self.amount.SetLabel("$%0.2f"%(base_cost+additional_costs))
    def toggleIngredients(self, event):
        self.UpdateCost()


app = wx.App(False)
window = Window(None, 'CheckBox Example')
app.MainLoop()

イベントを直接バインドすることもできました...しかし、ほとんどのコードをそのまま残しておきたかったのです

于 2012-07-31T17:16:15.943 に答える