小能豆

Tkinter Entry.get() 不返回值

python

我有一些 tkinter 类和 def,从一个条目开始,该条目将粘贴值,以便在单击 tkinter 按钮时更改 txt 特定行的内容。

录入部分:

class horizontal():
  def entry():
    global x
    text=tk.Entry(root)
    text.grid(row = y ,column = x);x+=1

问题是,无论我如何尝试,text.get() 都无法从输入框中获取任何信息来更改内容,我尝试将其从当前类、全局变量等中删除,但没有任何效果。这是txt读取和替换部分:

class readandwrite:
def typein(h):
    print("**********h is ",h)
    with open(r"D:\Largecodefile\Customer.txt", 'r', encoding='utf-8') as file:
        data = file.readlines()

    print('text get is',text.get())  
    data[h-1] = "11-201\n"#text.get()

    with open(r"D:\Largecodefile\Customer.txt", 'w', encoding='utf-8') as file:
        file.writelines(data)

我尝试打印出你从上面看到的内容,但我什么也没得到,它只是说 text get is就是这样。有什么想法我错在哪里吗?我尝试查看其他问题但找不到任何内容。谢谢你!

编辑:我正在对所发生的事情进行小型复制,但它似乎工作得很好,并像正常一样给出值,这就是我所做的,我也包含在不同的类中以证明它不会受到影响

class notinrturn:
def labels():
    l = tk.Label(window, bg='white', width=20, text='empty')
    l.pack()
class huhuhu:
def weird():
    global text
    if var.get() ==1:
        print(text.get())
 class defentry:
def entry():
    global x
    global text
    text=tk.Entry(window)
    text.pack()
  notinrturn.labels()        
  defentry.entry()

  var=tk.IntVar()
  c1 = tk.Checkbutton(window, text='Python',variable=var, 
  onvalue=1, offvalue=0, command=huhuhu.weird)
  c1.pack()

  window.mainloop()

上面的代码工作得很好,并按预期打印值,但与其他代码不同:( 在此输入图像描述

我将包含 github 链接,以防你们需要任何信息,很抱歉没有提供足够的信息,恐怕它可能太长:https: //github.com/StandardV/Deadline-Tracing


阅读 144

收藏
2023-07-25

共1个答案

小能豆

问题出在你的horizontal类的entry方法中。你需要对entry方法进行一些修改,以便将text作为类的成员变量,这样在其他方法中就可以访问它。同时,你也需要将horizontal类的实例传递给readandwrite类的typein方法,以便在按钮点击时触发行为。这里是你需要进行的修改:

首先,在horizontal类的entry方法中,将text声明为类的成员变量:

class horizontal():
    def entry(self):  # Add self parameter here
        global x
        self.text = tk.Entry(root)  # Use self.text instead of text
        self.text.grid(row=y, column=x)
        x += 1

接下来,在huhuhu类的weird方法中,你需要访问horizontal类的实例,并将其传递给readandwrite类的typein方法:

class huhuhu:
    def weird(self):  # Add self parameter here
        global text
        if var.get() == 1:
            print(self.text.get())  # Use self.text instead of text
            readwrite = readandwrite()
            readwrite.typein(1, self.text.get())  # Pass the instance and value to typein method

最后,在readandwrite类的typein方法中,接收horizontal类的实例作为参数,并进行相关操作:

class readandwrite:
    def typein(self, h, value):  # Add self parameter here
        print("**********h is ", h)
        with open(r"D:\Largecodefile\Customer.txt", 'r', encoding='utf-8') as file:
            data = file.readlines()

        print('text get is', value)
        data[h - 1] = value

        with open(r"D:\Largecodefile\Customer.txt", 'w', encoding='utf-8') as file:
            file.writelines(data)

在这些修改后,你应该能够在文本框中输入值,然后点击按钮时,能够正确地读取输入的值并进行相应的处理。

此外,你提供的 GitHub 链接似乎是一个私有仓库,我无法查看其中的内容。但是根据你提供的代码和问题描述,上述修改应该能够解决你的问题。

2023-07-25