Переменная радиобутона не обновляется - PullRequest
0 голосов
/ 15 октября 2018

Я знаю, что вопрос, подобный этому, был задан, и я перепробовал все, что было предложено, чтобы решить проблему, но я не могу решить эту проблему.Я делаю документ о том, что при нажатии радиокнопки появляется вторая радиокнопка, у которой есть варианты, которые будут варьироваться в зависимости от реакции на первую радиокнопку.Проблема в том, что ничего не происходит после выбора первой радиокнопки, переменная не установлена ​​равной значению, которое должно быть, если я правильно понимаю ... Я даже избавился от своих циклов, которые создали кнопки и добавили дополнительную функцию вкомандная строка в попытке установить переменную, но не повезло ... Я начинаю думать, что это невозможно сделать с помощью радиокнопок ... Кто-нибудь знает, если я пропускаю что-то, что не позволяет установить переменную?

from tkinter import Tk, Label, IntVar, Radiobutton

class pricingDoc:

    def __init__(self, master):
        self.master = master
        master.title("Dyna-Vac Equipment Pricing GUI")

        models = ["DJ5.636", "DJ1225", "DJ2040", "DJ4020", "DJ4030", "DJ6520"]
        model_prices = [8139.00, 23770.00, 48050.00, 48040.00, 48030.00, 66050.0]
        reels = ["""3/8" x 150'""", """1/2" x 300'""", """1/2" x 500'""", """3/4" x 600'""",
                 """3/4" x 800'""", """1" x 600'""", """1" x 800'"""]
        reel_prices = [0.00, 0.00, 850.00, 0.00, 1050.00, 0.00, 850.00]

        self.label1 = Label(master, text="Jet Trailer Model")
        self.label1.grid(row=1, column=1)
        self.label2 = Label(master, text="Price, in USD")
        self.label2.grid(row=1, column=3)

        def showchoice(var1, updateint):
            var1.set(updateint)

        var1 = IntVar(master)

        row_counter = 2
        self.modelbutton = Radiobutton(master, text=models[0], variable=var1, value=0, indicatoron=False,
                                           activebackground="green", width=12, command=lambda: showchoice(var1, 0))
        self.modelbutton.grid(row=row_counter, column=1)
        row_counter += 1
        self.modelbutton = Radiobutton(master, text=models[1], variable=var1, value=1, indicatoron=False,
                                         activebackground="green", width=12, command=lambda: showchoice(var1, 1))
        self.modelbutton.grid(row=row_counter, column=1)
        row_counter += 1
        self.modelbutton = Radiobutton(master, text=models[2], variable=var1, value=2, indicatoron=False,
                                         activebackground="green", width=12, command=lambda: showchoice(var1, 2))
        self.modelbutton.grid(row=row_counter, column=1)
        row_counter += 1
        self.modelbutton = Radiobutton(master, text=models[3], variable=var1, value=3, indicatoron=False,
                                         activebackground="green", width=12, command=lambda: showchoice(var1, 3))
        self.modelbutton.grid(row=row_counter, column=1)
        row_counter += 1
        self.modelbutton = Radiobutton(master, text=models[4], variable=var1, value=4, indicatoron=False,
                                         activebackground="green", width=12, command=lambda: showchoice(var1, 4))
        self.modelbutton.grid(row=row_counter, column=1)
        row_counter += 1
        self.modelbutton = Radiobutton(master, text=models[5], variable=var1, value=5, indicatoron=False,
                                         activebackground="green", width=12, command=lambda: showchoice(var1, 5))
        self.modelbutton.grid(row=row_counter, column=1)

        row_counter = 2

        for price in model_prices:
            self.label3 = Label(master, text=price)
            self.label3.grid(row=row_counter, column=3)
            row_counter += 1

        self.label4 = Label(master, text="model {} is chosen".format(var1.get()))
        self.label4.grid(row=row_counter, column=1)
        row_counter += 1

        self.label5 = Label(master, text="Reel Size Selection")
        self.label5.grid(row=row_counter, column=1)
        row_counter += 1

        var2 = IntVar(master)

        if var1.get() == 0:
            self.reelbutton = Radiobutton(master, text=reels[0], variable=var2, value=0, indicatoron=False,
                                                activebackground="green", width=12)
            self.reelbutton.grid(row=row_counter, column=1)
            row_counter += 1
            row_counter = 10
            self.label6 = Label(master, text=reel_prices[0])
            self.label6.grid(row=row_counter, column=3)

        elif 1 <= var1.get() <= 2:
            self.reelbutton = Radiobutton(master, text=reels[1], variable=var2, value=1, indicatoron=False,
                                                activebackground="green", width=12)
            self.reelbutton.grid(row=row_counter, column=1)
            self.label6 = Label(master, text=reel_prices[1])
            self.label6.grid(row=row_counter, column=3)
            row_counter += 1
            self.reelbutton = Radiobutton(master, text=reels[2], variable=var2, value=2, indicatoron=False,
                                            activebackground="green", width=12)
            self.reelbutton.grid(row=row_counter, column=1)
            self.label7 = Label(master, text=reel_prices[2])
            self.label7.grid(row=row_counter, column=3)
            row_counter += 1

        elif 3 <= var1.get() <= 4:
            self.reelbutton = Radiobutton(master, text=reels[3], variable=var2, value=3, indicatoron=False,
                                                activebackground="green", width=12)
            self.reelbutton.grid(row=row_counter, column=1)
            self.label6 = Label(master, text=reel_prices[3])
            self.label6.grid(row=row_counter, column=3)
            row_counter += 1
            self.reelbutton = Radiobutton(master, text=reels[4], variable=var2, value=4, indicatoron=False,
                                            activebackground="green", width=12)
            self.reelbutton.grid(row=row_counter, column=1)
            self.label7 = Label(master, text=reel_prices[4])
            self.label7.grid(row=row_counter, column=3)
            row_counter += 1

        elif var1.get() == 5:
            self.reelbutton = Radiobutton(master, text=reels[5], variable=var2, value=5, indicatoron=False,
                                                activebackground="green", width=12)
            self.reelbutton.grid(row=row_counter, column=1)
            self.label6 = Label(master, text=reel_prices[5])
            self.label6.grid(row=row_counter, column=3)
            row_counter += 1
            self.reelbutton = Radiobutton(master, text=reels[6], variable=var2, value=6, indicatoron=False,
                                            activebackground="green", width=12)
            self.reelbutton.grid(row=row_counter, column=1)
            self.label7 = Label(master, text=reel_prices[6])
            self.label7.grid(row=row_counter, column=3)
            row_counter += 1

        row_counter += 1
        self.label8 = Label(master, text="Total unit price as built: {}".format(model_prices[var1.get()] +
                                                                                reel_prices[var2.get()]))
        self.label8.grid(row=row_counter, column=3)
        row_counter += 1





root = Tk()
my_gui = pricingDoc(root)
root.mainloop()

1 Ответ

0 голосов
/ 15 октября 2018

Из того, что я вижу и проверял в вашем коде, мне не кажется, что элифы заключены в функцию, которая вызывается при нажатии переключателя.

Чтобы проверить эту теорию,Я бросил печать (var1.get ()) в функцию showchoice, и она печатает новый индекс с каждым кликом.Поэтому, чтобы продвинуться дальше, я переместил строки создания label4 и в эту функцию, и она корректно обновляет форму.

Так что для меня это выглядит так, будто блок elifs нужно инкапсулировать в функцию, которая вызывается(и, следовательно, обновляется) каждый раз, когда нажимаются переключатели.

Надеюсь, это поможет или, по крайней мере, поставит вас на правильный путь.Я не вижу причин, почему радио кнопки не могли или не должны использоваться для того, что вы делаете!

~ Cheers!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...