文本变量在tkinter中无意间绑定在一起

问题描述 投票:0回答:1

编写表格以处理库存的显示/输入。下面的代码几乎没有配对。问题是我有两个1个char STR变量,它们以某种方式绑定在一起,我不知道如何或为什么。

这两个变量将转换为INT的第一位和第二位(转换为STR后)。如果INT的第一位和第二位相同,则两个STR var会链接在一起-更改为一个会反映另一个。如果两个数字不同,则两个STR变量不会链接。我很确定自己在做一些愚蠢的事情,但是我没有看到。我曾尝试过重命名var,初始化,拆分代码,彻底消除所有内容,但问题仍然存在。有人想告诉我我在做什么愚蠢的事情吗?

from tkinter import *

class company_frame(Frame):
    def __init__(self, master):
        super().__init__(master)
        self["height"] = 40
        self["width"] = 1300
        self["relief"] = RAISED
        self["bd"] = 8
        self["bg"] = "#dfdfdf"

def inv_form():
    inv = [22001,"6' CAT6 Patch Cable, Blue",2.50,6.00,"02/01/2020","THD",1,1]
    cf = company_frame(root)
    cf.grid(row=0, column=2)

    class_id = StringVar()
    subclass_id = StringVar()
    item_id = StringVar()

    class_id =  str(inv[2])[0]
    subclass_id = str(inv[0])[1]
    item_id = str(inv[0])[2:5]

    # ENTRY SECTION
    class_e = Entry(cf, textvariable=class_id)
    class_e.delete(0, END)
    class_e.insert(0, class_id)
    class_e.config(width=1)

    subclass_e = Entry(cf, textvariable=subclass_id)
    subclass_e.delete(0, END)
    subclass_e.insert(0, subclass_id)
    subclass_e.config(width=1)

    item_e = Entry(cf, textvariable=item_id)
    item_e.delete(0, END)
    item_e.insert(0, item_id)
    item_e.config(width=3)

    #item num
    class_e.grid(row=3, column=1)
    subclass_e.grid(row=3, column=3)
    item_e.grid(row=3, column=5)
    return

root = Tk()
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
inv_form()
root.mainloop()
'''

Running python 3 on Ubuntu, tkinter is 8.6.
Any light is greatly appreciated.
python-3.x tkinter
1个回答
0
投票

问题是您没有将StringVar实例与条目窗口小部件一起使用。您所有的textvariable选项都将交给一个空字符串,因此tkinter认为它们都是相同的变量。

这是因为您创建了StringVar的实例,然后立即重新使用相同的变量名来获取值。

您需要删除以下三行:

class_id =  str(inv[2])[0]
subclass_id = str(inv[0])[1]
item_id = str(inv[0])[2:5]

您还可以删除以下几行代码,在这些代码中您将一些东西明确插入条目小部件:

class_e.delete(0, END)
class_e.insert(0, class_id)
...
subclass_e.delete(0, END)
subclass_e.insert(0, subclass_id)
...
item_e.delete(0, END)
item_e.insert(0, item_id)
© www.soinside.com 2019 - 2024. All rights reserved.