tkinter.Radiobutton При запуске программы показывает сразу 2 варианта выбора

Решал задачу с переключателями и вроде бы задачу решил, но при запуске высвечиваются сразу два варианта выбора (скрин ниже).

Не могу понять, это можно как то исправить? Не знаю с какой стороны даже подойти к решению. Заранее спасибо за любые советы.

import tkinter as tk
import tkinter.messagebox
class MyGUI:
    def __init__(self):
        self.main_window = tk.Tk()
        self.frame1 = tk.Frame(self.main_window)
        self.frame2 = tk.Frame(self.main_window)
        self.frame3 = tk.Frame(self.main_window)
        self.radio_var = tk.IntVar()
        self.radio_var.set(1)
        self.v1 = tk.Radiobutton(self.frame1,
                                 text = 'Daytime',
                                 command = self.radio_var,
                                 value = 1)
        self.v2 = tk.Radiobutton(self.frame1,
                                 text = 'Evening',
                                 command = self.radio_var,
                                 value = 2)
        self.v3 = tk.Radiobutton(self.frame1,
                                 text = 'Nighttime',
                                 command = self.radio_var,
                                 value = 3)
        self.v1.pack()
        self.v2.pack()
        self.v3.pack()
        self.label1 = tk.Label(self.frame2,
                               text = 'Quantity minuts: ')
        self.entry0 = tk.Entry(self.frame2,
                               width = 8)
        self.label1.pack(side = 'left')
        self.entry0.pack(side = 'left')
        self.button1 = tk.Button(self.frame3,
                                 text = 'Show cost',
                                 command = self.show_cost)
        self.button2 = tk.Button(self.frame3,
                                 text = 'Quit',
                                 command = self.main_window.destroy)
        self.button1.pack(side = 'left')
        self.button2.pack(side = 'left')
        self.frame1.pack()
        self.frame2.pack()
        self.frame3.pack()
        tk.mainloop()
    def show_cost(self):
        minutes = int(self.entry0.get())
        amount = 0
        if self.radio_var.get() == 1:
            amount = minutes * 1.4
        elif self.radio_var.get() == 2:
            amount = minutes * 1.8
        elif self.radio_var.get() == 3:
            amount = minutes * 1.1
        tkinter.messagebox.showinfo('Programm', 'Your expenses: ' +
                                    str(amount))
mygui = MyGUI()

При запуске показывает это (я еще ничего не выбирал).

При запуске показывает это, я еще ничего не выбирал.


Ответы (1 шт):

Автор решения: S. Nick

Синтаксис для создания виджета:

w = Radiobutton(master, option, ... )

master - это родительское окно.

options - список наиболее часто используемых параметров для этого виджета. Эти параметры можно использовать как пары ключ-значение, разделенные запятыми.

  • text - метка, отображаемая рядом с радиокнопкой.

  • value - когда пользователь включает радиокнопку, для ее управляющей переменной устанавливается текущее значение параметра. Если управляющая переменная является IntVar, присвойте каждому переключателю в группе разные варианты целочисленных значений. Если управляющая переменная является StringVar, присвойте каждой радиокнопке другой параметр строкового значения.

  • variable: ссылка на переменную, как правило, типа IntVar, которая хранит состояние переключателя

  • ...


import tkinter as tk
import tkinter.messagebox


class MyGUI:
    def __init__(self):
        self.main_window = tk.Tk()
        self.frame1 = tk.Frame(self.main_window)
        self.frame2 = tk.Frame(self.main_window)
        self.frame3 = tk.Frame(self.main_window)
        self.radio_var = tk.IntVar()
        self.radio_var.set(1)
        self.v1 = tk.Radiobutton(self.frame1,
                                 text = 'Daytime',
#                                 command = self.radio_var,
                                 variable = self.radio_var,
                                 value = 1)
        self.v2 = tk.Radiobutton(self.frame1,
                                 text = 'Evening',
#                                 command = self.radio_var,
                                 variable = self.radio_var,
                                 value = 2)
        self.v3 = tk.Radiobutton(self.frame1,
                                 text = 'Nighttime',
#                                 command = self.radio_var,
                                 variable = self.radio_var,
                                 value = 3)
        self.v1.pack()
        self.v2.pack()
        self.v3.pack()
        self.label1 = tk.Label(self.frame2,
                               text = 'Quantity minuts: ')
        self.entry0 = tk.Entry(self.frame2,
                               width = 8)
        self.label1.pack(side = 'left')
        self.entry0.pack(side = 'left')
        self.button1 = tk.Button(self.frame3,
                                 text = 'Show cost',
                                 command = self.show_cost)
        self.button2 = tk.Button(self.frame3,
                                 text = 'Quit',
                                 command = self.main_window.destroy)
        self.button1.pack(side = 'left')
        self.button2.pack(side = 'left')
        self.frame1.pack()
        self.frame2.pack()
        self.frame3.pack()
        tk.mainloop()
        
    def show_cost(self):
        minutes = int(self.entry0.get())
        amount = 0
        if self.radio_var.get() == 1:
            amount = minutes * 1.4
        elif self.radio_var.get() == 2:
            amount = minutes * 1.8
        elif self.radio_var.get() == 3:
            amount = minutes * 1.1
        tkinter.messagebox.showinfo('Programm', 'Your expenses: ' +
                                    str(amount))
                                    
mygui = MyGUI()

введите сюда описание изображения

→ Ссылка