- Tkinter GUI Programming by Example
- David Love
- 381字
- 2021-08-27 18:49:09
Getting text input
We now know how to get Boolean information from our user, but what if we want to get something more detailed, such as text?
Tkinter provides us with the perfect widget to do just this – Entry.
An Entry widget is a one-line text entry box which is put into a parent widget just like a Label or Button. The special Tkinter variables can be attached to an Entry to make getting the value out a breeze.
Why don't we add some personalization to our Hello World application? Grab your code and adjust it to the following:
class Window(tk.Tk):
def __init__(self):
super().__init__()
self.title("Hello Tkinter")
self.label_text = tk.StringVar()
self.label_text.set("My Name Is: ")
self.name_text = tk.StringVar()
self.label = tk.Label(self, textvar=self.label_text)
self.label.pack(fill=tk.BOTH, expand=1, padx=100, pady=10)
self.name_entry = tk.Entry(self, textvar=self.name_text)
self.name_entry.pack(fill=tk.BOTH, expand=1, padx=20, pady=20)
hello_button = tk.Button(self, text="Say Hello",
command=self.say_hello)
hello_button.pack(side=tk.LEFT, padx=(20, 0), pady=(0, 20))
goodbye_button = tk.Button(self, text="Say Goodbye",
command=self.say_goodbye)
goodbye_button.pack(side=tk.RIGHT, padx=(0, 20), pady=(0, 20))
If you run this version of the code, you will now see a text box in which to enter your name. As we enter our name in the Entry widget, its value is automatically assigned to the name_text StringVar thanks to the textvar keyword argument:

The buttons will still function the same, however, so let's do something about that:
def say_hello(self):
message = "Hello there " + self.name_entry.get()
msgbox.showinfo("Hello", message)
def say_goodbye(self):
if msgbox.askyesno("Close Window?", "Would you like to
close this window?"):
message = "Window will close in 2 seconds - goodybye " + self.name_text.get()
self.label_text.set(message)
self.after(2000, self.destroy)
else:
msgbox.showinfo("Not Closing", "Great! This window
will stay open.")
These functions demonstrate both of the ways we can now grab the value back out of our Entry widget. We can either call the get method of the Entry itself, or grab the value out of our StringVar (also with the get method).
If the Entry box itself is the only part of your application which will need to use its value, I would recommend just grabbing it directly via .get() and foregoing the use of a StringVar. If, however, its value will be needed by other parts of your application, using a StringVar is probably the best way. This allows you to use the set method to adjust its value programmatically.
- 數據庫系統教程(第2版)
- Unity 2020 Mobile Game Development
- Vue.js快速入門與深入實戰(zhàn)
- 三維圖形化C++趣味編程
- 程序員考試案例梳理、真題透解與強化訓練
- C語言從入門到精通(第4版)
- 深入淺出React和Redux
- 軟件測試實用教程
- 軟件供應鏈安全:源代碼缺陷實例剖析
- Kubernetes進階實戰(zhàn)
- Bootstrap for Rails
- 區(qū)塊鏈架構之美:從比特幣、以太坊、超級賬本看區(qū)塊鏈架構設計
- Python一行流:像專家一樣寫代碼
- Getting Started with Electronic Projects
- 大話代碼架構:項目實戰(zhàn)版