tkinter 语法理解

tkinter syntax comprehension

我是新手,一直在慢慢尝试学习一些 tkinter,我已经找到了一些用于基本项目的不错的资源,但是代码的解释有点缺乏,我希望有人能帮助我了解一些我拼凑的东西。

完整代码

from tkinter import *

#Create window and give it title
root = Tk()
root.title('Tip Calculator - Charlie')

#define the window sizes
window_width = 600
window_height = 400
#get the screen size
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
#solve for center of screen based on window & screen Size
center_x = int(screen_width/2 - window_width/2)
center_y = int(screen_height/2 - window_height/2)
#implement the above to position window width/height
root.geometry(f'{window_width}x{window_height}+{center_x}+{center_y}')


var = IntVar()
frame = LabelFrame(root,text = "Tip %")
frame.pack(pady=10)

r1 = Radiobutton(frame, text = 'no Tip', variable = var, value = 0)
r1.grid(column =0, row =1)
r2= Radiobutton(frame, text = '10 %', variable = var, value = 1)
r2.grid(column=0, row =2)
r3=Radiobutton(frame, text = '15 %', variable = var, value = 2)
r3.grid(column=1, row = 1)
r4= Radiobutton(frame, text = '20 %', variable = var, value =3)
r4.grid(column=1, row=2)

有问题的代码

var = IntVar()
frame = LabelFrame(root,text = "Tip %")
frame.pack(pady=10)

r1 = Radiobutton(frame, text = 'no Tip', variable = var, value = 0)
r1.grid(column =4, row =1)
r2= Radiobutton(frame, text = '%', variable = var, value = 1)
r2.grid(column=4, row =2)

所以我在某种程度上理解 r1 是“单选按钮”的变量名称,文本设置为按钮旁边弹出的内容。 问题是什么 variable = var, value = 1 前 3 行我不知所措为什么要创建一个名为 var 的变量以及设置它 = IntVar() 有什么作用?
框架是一个小部件吗?我假设 pack 是定位(网格)的另一个版本?

这个页面会给你很好的解释radio widget

Var 用于建立整数变量而不是字符串变量。 (IntVar() 与 StringVar())。通读该文档中的解释,让我知道它是否仍然没有意义。至于你对 pack() 的质疑,它只是一种快速方法,如果你没有指定任何其他内容,它实际上会将小部件打包在中心和顶部。

variable = var表示当单选按钮被selected时,var变量中的IntVar应该被赋予这个单选按钮的值。 value 选项指定应该用于每个单选按钮的值。

所以在 select no Tip 单选按钮之后,var.get() 将是 0。在您 select 按 % 按钮后,var.get() 将是 1。这就是您如何找出他们使用单选按钮做出的选择。

后面的代码你可以这样写:

if var.get() == 0:
    tip = 0
elif var.get() == 1:
    tip = 0.10 * total_price
elif var.get() == 2:
    tip = 0.15 * total_price
elif var.get() == 3:
    tip = 0.20 * total_price

price_with_tip = total_price + tip

pack() 是一个几何管理器,是 grid()place() 的替代品。看到这个 tutorial

为了回答您的后续问题,我认为这将有助于您处理后续步骤。

from tkinter import *

def get_value():
    tab = 50 # set to 50 but could get a value from entry if you want
   
    choice = var.get()
    print(choice) # print your choice for clarification
    ten_percent = tab * .1 # math for tip
    total = ten_percent + tab
    if choice == 1:
        print("Your total plus tip is:", total)
        print("Your tip amount was:", ten_percent)
    
#Create window and give it title
root = Tk()
root.title('Tip Calculator - Charlie')

#define the window sizes
window_width = 600
window_height = 400
#get the screen size
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
#solve for center of screen based on window & screen Size
center_x = int(screen_width/2 - window_width/2)
center_y = int(screen_height/2 - window_height/2)
#implement the above to position window width/height
root.geometry(f'{window_width}x{window_height}+{center_x}+{center_y}')


var = IntVar()
frame = LabelFrame(root,text = "Tip %")
frame.pack(pady=10)

r1 = Radiobutton(frame, text = 'no Tip', variable = var, value = 0)
r1.grid(column =0, row =1)
r2= Radiobutton(frame, text = '10 %', variable = var, value = 1)
r2.grid(column=0, row =2)
r3=Radiobutton(frame, text = '15 %', variable = var, value = 2)
r3.grid(column=1, row = 1)
r4= Radiobutton(frame, text = '20 %', variable = var, value =3)
r4.grid(column=1, row=2)
button = Button(root, text="Check", command= get_value)
button.pack()