我希望我的条目检查我在条目小部件中输入的名称的长度,并以小写形式返回。因此,当您单击打印按钮时,它会以小写字母打印您输入的名称。
挑战:
当我点击打印按钮时,它不打印您输入的名称,但它会打印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()
答案 0 :(得分:1)
它没有打印记者的名字,因为你没有打电话给journalist()
!
将print(journalist)
更改为print(journalist())
这应该有用!
答案 1 :(得分:1)
在评论中,您说:"它要求您在我的终端中输入名称,但我想要在我的输入窗口小部件中输入的名称"。好吧,它要求终端中的用户输入,因为你通过input()
电话告诉它这样做。
这是您的代码的重新组织版本,可以满足您的需求。
我们从Entry小部件的textvariable news
获取用户输入,测试它不是太大,将其转换为小写,然后在终端中打印。如果它太长,我们会在消息框中显示一条错误消息,并将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?