python - Tkinter:输入框值不存储到 StringVar() 对象中

标签 python tkinter tkinter-entry

我试图查看 Entry 小部件中输入的值是否存储在 StringVar() 对象内,但是当我打印字符串值对象的长度时,它显示为 0。

class POS(tk.Tk):
def __init__(self,*args,**kwargs):
    tk.Tk.__init__(self, *args, **kwargs)
    """
    some code to build multiple frames here
    """

class MainPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)

        frame5 = Frame(self, bg = "pink")
        frame5.pack(fill = BOTH)

        frame5Label1 = tk.Label(frame5, text = "Product Bar Code", font = NORMAL_FONT)
        frame5Label1.grid(row = 0, column = 0, padx=5, pady=5, sticky = W)

        barCode = StringVar()
        frame5EntryBox = ttk.Entry(frame5, textvariable = barCode, width = 40)
        frame5EntryBox.grid(row = 0, column = 1, padx = 5, pady = 5)

        frame5Button = ttk.Button(frame5, text = "Add Item", command = lambda: updateCustomerList(barCode))
        frame5Button.grid(row = 0, column = 2, padx = 130, pady = 10)


def updateCustomerList(barCode):
    print(len(barCode.get()))

app = POS()
app.geometry("700x700")
app.resizable(False,False)
app.mainloop()

最佳答案

最小工作示例,显示按下 Button 后分配给 EntryStringVar 长度

import tkinter as tk

# --- functions ---

def check():
    print('len:', len(var.get()))

# --- main ---

root = tk.Tk()

var = tk.StringVar()

ent = tk.Entry(root, textvariable=var)
ent.pack()

but = tk.Button(root, text="Check", command=check)
but.pack()

root.mainloop()

mainloop 显示带有小部件的窗口,因此在启动 mainloop 之前使用 len() 没有任何意义,因为 var 是还是空的。

<小时/>

编辑:与您的类(class)和类(class)外的职能

import tkinter as tk
from tkinter import ttk

# --- classes ---

class MainPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        frame5 = tk.Frame(self, bg="pink")
        frame5.pack(fill="both")

        frame5Label1 = tk.Label(frame5, text="Product Bar Code", font="NORMAL_FONT")
        frame5Label1.grid(row=0, column=0, padx=5, pady=5, sticky="w")

        barCode = tk.StringVar()
        frame5EntryBox = ttk.Entry(frame5, textvariable=barCode, width=40)
        frame5EntryBox.grid(row=0, column=1, padx=5, pady=5)

        frame5Button = ttk.Button(frame5, text="Add Item", command=lambda:updateCustomerList(barCode))
        frame5Button.grid(row=0, column=2, padx=130, pady=10)

# --- functions ---

def updateCustomerList(barCode):
    print(len(barCode.get()))

# --- main ---

root = tk.Tk()

main = MainPage(root, root)
main.pack()

root.mainloop()

或者使用self.并将函数作为方法放入类中

import tkinter as tk
from tkinter import ttk

# --- classes ---

class MainPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        frame5 = tk.Frame(self, bg="pink")
        frame5.pack(fill="both")

        frame5Label1 = tk.Label(frame5, text="Product Bar Code", font="NORMAL_FONT")
        frame5Label1.grid(row=0, column=0, padx=5, pady=5, sticky="w")

        self.barCode = tk.StringVar()
        frame5EntryBox = ttk.Entry(frame5, textvariable=self.barCode, width=40)
        frame5EntryBox.grid(row=0, column=1, padx=5, pady=5)

        frame5Button = ttk.Button(frame5, text="Add Item", command=self.updateCustomerList)
        frame5Button.grid(row=0, column=2, padx=130, pady=10)

    def updateCustomerList(self):
        print(len(self.barCode.get()))

# --- functions ---


# --- main ---

root = tk.Tk()

main = MainPage(root, root)
main.pack()

root.mainloop()

关于python - Tkinter:输入框值不存储到 StringVar() 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48141324/

相关文章:

python - 使用 pip freeze > requirements.txt 将复制特定于该目录的库?

python - 如何将 Pandas 数据帧拆分为从 NaN 到 NaN 的 block ?

python - 创建多行文本输入的更好方法?

python - Tkinter 标签文本不会每次都改变

python - 使用 tkinter 按钮杀死多进程池

python - Tkinter 将条目框值存储为其他文件的值

python - 使用 pandas、python 创建字典,返回错误 : "return self._engine.get_loc(key)"

python - render() 不渲染模板

python - 清除条目小部件框

python - tkinter 入口高度