如何让您的条目接收您编写的函数并在 tkinter 中打印它
How to let your entry receive function you've written and print it in tkinter
我希望我的条目检查我在条目小部件中键入的名称的长度,并将其 return 小写。因此,当您单击打印按钮时,它会以小写形式打印您输入的名称。
挑战:
当我点击打印按钮时,它不会打印您输入的名称,但会打印 journalist
函数的 ID。
from tkinter import messagebox
from tkinter import *
def journalist():
name = input("please enter journalist name:")
if len(name) > 15: # checks the length of your input
messagebox.showerror("error,message=name more than length of '15' ")
return(name.lower()) # converts the name string entered to lowercase
def print_journalist_name():
print(journalist)
# To print name entered
root = Tk()
root.geometry("300x300")
news = StringVar()
label = Label(text="Name").place(x=5, y=100)
entry = Entry(root, width=40, textvariable=news).place(x=45, y=100)
button = Button(root, text="Print", command=print_journalist_name).place(x=90, y=200)
root.mainloop()
它不会打印记者的名字,因为你还没有打电话给 journalist()
!
将print(journalist)
更改为print(journalist())
应该可以!
在评论中,您说:"it asks you to enter the name in my terminal but i want the name I entered in my entry widget"。好吧,它要求用户在终端中输入,因为你通过 input()
调用告诉它这样做。
这是您的代码的重新组织版本,可以满足您的需求。
我们从 Entry 小部件的文本变量 news
中获取用户输入,测试它不是太大,将其转换为小写,并在终端中打印。如果太长,我们会在messagebox中显示错误信息,并将Entry中的字符串设置为空字符串。
import tkinter as tk
from tkinter import messagebox
def print_journalist_name():
# Get the name from the Entry widget
name = news.get()
if len(name) > 15:
msg = "Length of\n{}\nis greater than 15".format(name)
messagebox.showerror("error", message=msg)
# Clear the name
news.set('')
else:
print(name.lower())
root = tk.Tk()
root.geometry("300x300")
label = tk.Label(text="Name").place(x=5,y=100)
news = tk.StringVar()
entry = tk.Entry(root, width=40, textvariable=news).place(x=45,y=100)
button = tk.Button(root, text="Print", command=print_journalist_name).place(x=90,y=200)
root.mainloop()
我去掉了 from tkinter import *
,因为 import tkinter as tk
更干净,并且使代码更易于阅读,因为很明显哪些名称来自 Tkinter。
当你做的时候
from tkinter import *
它将 135 个 Tkinter 名称放入您的命名空间;在 Python 2 你得到 175 个名字。这会在命名空间中造成不必要的混乱,并可能导致名称冲突:如果您不小心将其中一个变量命名为可能导致神秘错误的导入名称之一。当您对多个模块进行星号导入时,情况会更糟,因为它们会互相践踏彼此的名字。此外,星号导入使代码更难阅读,因为您必须记住哪些名称是本地定义的,哪些是导入的,并且对于多个星号导入,它们是从哪里导入的。
有关此重要主题的更多信息,请参阅 Why is “import *” bad?
我希望我的条目检查我在条目小部件中键入的名称的长度,并将其 return 小写。因此,当您单击打印按钮时,它会以小写形式打印您输入的名称。
挑战:
当我点击打印按钮时,它不会打印您输入的名称,但会打印 journalist
函数的 ID。
from tkinter import messagebox
from tkinter import *
def journalist():
name = input("please enter journalist name:")
if len(name) > 15: # checks the length of your input
messagebox.showerror("error,message=name more than length of '15' ")
return(name.lower()) # converts the name string entered to lowercase
def print_journalist_name():
print(journalist)
# To print name entered
root = Tk()
root.geometry("300x300")
news = StringVar()
label = Label(text="Name").place(x=5, y=100)
entry = Entry(root, width=40, textvariable=news).place(x=45, y=100)
button = Button(root, text="Print", command=print_journalist_name).place(x=90, y=200)
root.mainloop()
它不会打印记者的名字,因为你还没有打电话给 journalist()
!
将print(journalist)
更改为print(journalist())
应该可以!
在评论中,您说:"it asks you to enter the name in my terminal but i want the name I entered in my entry widget"。好吧,它要求用户在终端中输入,因为你通过 input()
调用告诉它这样做。
这是您的代码的重新组织版本,可以满足您的需求。
我们从 Entry 小部件的文本变量 news
中获取用户输入,测试它不是太大,将其转换为小写,并在终端中打印。如果太长,我们会在messagebox中显示错误信息,并将Entry中的字符串设置为空字符串。
import tkinter as tk
from tkinter import messagebox
def print_journalist_name():
# Get the name from the Entry widget
name = news.get()
if len(name) > 15:
msg = "Length of\n{}\nis greater than 15".format(name)
messagebox.showerror("error", message=msg)
# Clear the name
news.set('')
else:
print(name.lower())
root = tk.Tk()
root.geometry("300x300")
label = tk.Label(text="Name").place(x=5,y=100)
news = tk.StringVar()
entry = tk.Entry(root, width=40, textvariable=news).place(x=45,y=100)
button = tk.Button(root, text="Print", command=print_journalist_name).place(x=90,y=200)
root.mainloop()
我去掉了 from tkinter import *
,因为 import tkinter as tk
更干净,并且使代码更易于阅读,因为很明显哪些名称来自 Tkinter。
当你做的时候
from tkinter import *
它将 135 个 Tkinter 名称放入您的命名空间;在 Python 2 你得到 175 个名字。这会在命名空间中造成不必要的混乱,并可能导致名称冲突:如果您不小心将其中一个变量命名为可能导致神秘错误的导入名称之一。当您对多个模块进行星号导入时,情况会更糟,因为它们会互相践踏彼此的名字。此外,星号导入使代码更难阅读,因为您必须记住哪些名称是本地定义的,哪些是导入的,并且对于多个星号导入,它们是从哪里导入的。
有关此重要主题的更多信息,请参阅 Why is “import *” bad?