Tkinter IntVar - Tkinter教程及实例

2,813 阅读4分钟

大家好!在本教程中,我们将学习Tkinter IntVar函数,以及如何在Python中使用它来存储、检索和管理整数变量。所以让我们开始学习IntVar()函数。

Tkinter IntVar() 函数

Tkinter包含内置的编程类型,其工作方式与普通的Python类型类似,并具有额外的功能,用于更有效地操作部件的值,如LabelEntry ,这使得它们与Python数据类型不同。这些变量也包含getter和setter方法来访问和改变它们的值。IntVar 就是其中的一个例子。

使用IntVar() 函数定义的变量持有整数数据,我们可以设置整数数据,也可以使用getter和setter方法进行检索。这些变量可以传递给各种widget参数,例如,Radio Button和CheckBox Button的变量参数,Label Widget的textvariable参数,等等,我们将在例子中看到。一旦这些变量被连接到widget,这种连接是双向的:如果IntVar()变量发生变化,widget的值也会自动更新为新的值。

定义Tkinter的IntVar()变量

我们需要TkinterIntVar() 函数,它需要以下参数来定义变量。

  • master:它是与IntVar() 变量有关的窗口。如果没有指定,它默认为根窗口。
  • 。给予整数变量的初始值。默认为0。
  • name: 给予定义变量的名称。默认值是PY_VARnum(如PY_VAR1,PY_VAR2等)。
import tkinter as tk

master_window = tk.Tk()
master_window.geometry("250x150")
master_window.title("IntVar Example")

integer_variable = tk.IntVar(master_window, 255)

label = tk.Label(master_window, textvariable=integer_variable, height=250)
label.pack()

master_window.mainloop()

改变IntVar()变量的值

由于IntVar() 是Tkinter建立的编程类型,它包含setter方法来改变其变量的值。我们可以使用set() 方法来改变整数数据的值。

import tkinter as tk

master_window = tk.Tk()
master_window.geometry("250x150")
master_window.title("IntVar Example")

integer_variable = tk.IntVar(master=master_window, value=1)

label = tk.Label(master_window, textvariable=integer_variable, height=250)
label.pack()

integer_variable.set(100)

master_window.mainloop()

检索IntVar()变量的值

我们可以在IntVar() 变量上使用get() 方法来检索该变量中的文本值。

import tkinter as tk

master_window = tk.Tk()

int_var = tk.IntVar(master = master_window, value = 255)

num = int_var.get()

print(type(num))
print(num)

输出:

<class 'int'>
255

Tkinter IntVar()实例

让我们考虑一些IntVar()的不同用法的例子。

当IntVar()变量数据改变时通知

每当IntVar() 变量的值发生变化时,我们可以得到通知并做一些工作。这是Tkinter定义的对象的一个有趣的功能,每当它的值被读取、更新或删除时都会被通知。如果你想在对IntVar() 变量进行某些操作时自动更新其他部件,这个功能也很有用。

要在IntVar() 对象上定义一个回调,我们可以在IntVar() 对象上使用trace() 方法,该方法需要两个参数:

  • 模式:对IntVar() 对象的操作类型。
    • 'write': 当值被改变时调用回调
    • 'read': 当值被读取时调用回调
    • 'unset': 当值被删除时调用回调
  • callback:在对象上有操作时调用的方法。

让我们考虑一个简单的2个数字之和的例子,我们有2个输入数字的入口部件和一个显示2个数字之和的标签。每当 Entry小组件IntVar() 变量发生变化时,总和就会自动更新。

import tkinter as tk

class SumOfTwoNumbers(tk.Tk):
  def __init__(self):
    super().__init__()
    self.title("Sum of 2 Numbers")
    self.geometry("300x300")
    
    # define IntVar() variables A and B
    self.A = tk.IntVar()
    self.B = tk.IntVar()
    
    # assign methods to notify on IntVar() variables
    self.A.trace_add("write", self.calculate_sum)
    self.B.trace_add("write", self.calculate_sum)
    
    self.create_widgets()
  
  def create_widgets(self):
    self.A_label = tk.Label(self, text="A: ")
    self.B_label = tk.Label(self, text="B: ")
    
    self.A_entry = tk.Entry(self, textvariable=self.A)
    self.B_entry = tk.Entry(self, textvariable=self.B)
    
    self.sum_label = tk.Label(self, text="Sum: ")
    self.result_label = tk.Label(self, text=self.A.get() + self.B.get())
    
    self.A_label.grid(row=0, column=0, padx=5, pady=5)
    self.A_entry.grid(row=0, column=1, padx=5, pady=5)
    self.B_label.grid(row=1, column=0, padx=5, pady=5)
    self.B_entry.grid(row=1, column=1, padx=5, pady=5)
    self.sum_label.grid(row=2, column=0, padx=5, pady=5)
    self.result_label.grid(row=2, column=1, padx=5, pady=5)

  def calculate_sum(self, *args):
    try:
      num_a = self.A.get()
    except:
      num_a = 0
    
    try:
      num_b = self.B.get()
    except:
      num_b = 0
    
    self.result_label['text'] = num_a + num_b

if __name__ == "__main__":
  app = SumOfTwoNumbers()
  app.mainloop()

监测RadioButton和CheckBox小工具中的选择值

IntVar() 变量的另一个常见应用是跟踪RadioButton和CheckBox Widget中的选择值,如下例所示。

import tkinter as tk

class RadioButtonExample(tk.Tk):
  def __init__(self):
    super().__init__()
    self.title("Radio Button Example")
    self.geometry("300x300")
    
    # define IntVar() for selected value
    self.selected_value = tk.IntVar()
    
    self.create_widgets()
  
  def create_widgets(self):
    self.intro_label = tk.Label(
      self, 
      text="Choose your favourite language").pack()

    self.rb1 = tk.Radiobutton(
      self,
      text="Python",
      padx=5,
      pady=5,
      variable=self.selected_value,
      value=1).pack()
    
    self.rb2 = tk.Radiobutton(
      self,
      text="Java",
      padx=5,
      pady=5,
      variable=self.selected_value,
      value=2).pack()
    
    self.rb3 = tk.Radiobutton(
      self,
      text="C++",
      padx=5,
      pady=5,
      variable=self.selected_value,
      value=3).pack()
    
    self.rb4 = tk.Radiobutton(
      self,
      text="Dart",
      padx=5,
      pady=5,
      variable=self.selected_value,
      value=4).pack()
    
    self.text_label = tk.Label(
      self,
      text="Option selected is:",
      pady=15
    ).pack()
    
    self.value_label = tk.Label(
      self,
      textvariable=self.selected_value,
      padx=5,
      pady=5).pack()

if __name__ == "__main__":
  app = RadioButtonExample()
  app.mainloop()

总结。

在本教程中,我们了解了TkinterIntVar() 和各种可以使用它的场景,它可以使我们的生活更轻松,但定义回调可以帮助我们自动更新其他小工具。

谢谢你的阅读!!