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 шт):
Синтаксис для создания виджета:
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()

