如何让您的条目接收您已编写并在tkinter中打印的功能

时间:2017-08-18 10:41:46

标签: python tkinter tkinter-entry

我希望我的条目检查我在条目小部件中输入的名称的长度,并以小写形式返回。因此,当您单击打印按钮时,它会以小写字母打印您输入的名称。

挑战:

当我点击打印按钮时,它不打印您输入的名称,但它会打印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()

2 个答案:

答案 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?