python-3.x 如何在Ctkinter框架类中显示值?

0x6upsns  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(134)

我的第一篇文章在这里。请帮帮我我所要做的就是在Ctkframe的Ctkentry小部件中显示单词“yay”。
我收到这个错误:名称错误:名称'word'未定义。您的意思是:命令?

import customtkinter as ctk

ctk.set_appearance_mode("dark")

class Frame1(ctk.CTkFrame):
    def __init__(self, master, word):
        super().__init__(master)

        self.name = ctk.CTkLabel(self, text="Name", fg_color="transparent")
        self.name.grid(row=1, column=0, padx=10, pady=10, sticky="w")

        self.name_x = ctk.CTkEntry(self, width = 300, placeholder_text="")
        self.name_x.grid(row=1, column=1, padx=10, pady=10, sticky="e")
        self.name_x.insert(word)
   
class App(ctk.CTk):
    def __init__(self):
        super().__init__()

        self.title("CRD Master")
        self.geometry("1000x650")
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        self.acc_no = ctk.CTkEntry(self, width = 60, placeholder_text="Acc. no.")
        self.acc_no.grid(row=0, column=0, padx=10, pady=10, sticky="w")

        self.button = ctk.CTkButton(self, width = 60, text="get", command=self.button_callback)
        self.button.grid(row=0, column=0, padx=10, pady=10, sticky="e")

        frame = Frame1(self, word)
        frame.grid(row=1, column=0, padx=10, pady=(10, 0), sticky="nsw")

    def button_callback(self):
         word = "yay"    

app=App()
app.mainloop()

我花了几个小时在这上面,但不能弄清楚,互联网也没有答案。是的,这个错误可能解释了这个问题,但是我仍然不明白如何将一个值传递到一个类中并显示该值。

92dk7w1h

92dk7w1h1#

NameError: name 'word' is not defined. Did you mean: 'ord'?
这个错误来自第31行:

frame = Frame1(self, word)

你没有在代码中定义word
也许你认为这个函数定义了它:

def button_callback(self):
        word = "yay"

但是
1.直到按钮被按下时才调用该函数。
1.即使之前调用了这个函数,你仍然会得到这个错误,因为你是在button_callback函数的本地定义它。
另一件要提到的事情是,在你修复这个错误之后,你会得到另一个错误:

self.name_x.insert(word)
TypeError: CTkEntry.insert() missing 1 required positional argument: 'string'

这是因为.insert()函数接收两个参数:indexvalue。你在索引参数位置提供了值,所以函数没有得到任何值。
你可以像这样修复这个错误:

self.name_x.insert('end', word)

编辑

这里有一种方法可以修复你的代码:

class Frame1(ctk.CTkFrame):
    def __init__(self, master):
        super().__init__(master)
        self.word = ''

        self.name = ctk.CTkLabel(self, text="Name", fg_color="transparent")
        self.name.grid(row=1, column=0, padx=10, pady=10, sticky="w")

        self.name_x = ctk.CTkEntry(self, width = 300, placeholder_text="")
        self.name_x.grid(row=1, column=1, padx=10, pady=10, sticky="e")

    
    def replace_word(self, word):
        self.word = word
        self.name_x.delete("0", 'end') # delete the entry content
        self.name_x.insert("end", self.word) # add the word

   
class App(ctk.CTk):
    def __init__(self):
        super().__init__()

        self.title("CRD Master")
        self.geometry("1000x650")
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        self.acc_no = ctk.CTkEntry(self, width = 60, placeholder_text="Acc. no.")
        self.acc_no.grid(row=0, column=0, padx=10, pady=10, sticky="w")

        self.button = ctk.CTkButton(self, width = 60, text="get", command=self.button_callback)
        self.button.grid(row=0, column=0, padx=10, pady=10, sticky="e")

        self.frame = Frame1(self)
        self.frame.grid(row=1, column=0, padx=10, pady=(10, 0), sticky="nsw")

    def button_callback(self):
        self.frame.replace_word("yay")
  • 我从Frame1__init__函数中删除了word参数,因为它是不必要的。如果你需要的话,你可以修改以下代码:
class Frame1(ctk.CTkFrame):
    def __init__(self, master, word):
        super().__init__(master)
        self.word = word
    ...

self.frame = Frame1(self, '')

另外,在当前实现中,不需要self.word。如果你想获取entry的内容,你可以简单地使用self.name_x.get()

ifmq2ha2

ifmq2ha22#

我已经使用了你的建议,但仍然没有成功地在ctkframe中的条目小部件中显示单词'yay'。我没有得到错误或想要的结果,也没有互联网资源显示如何将数据输出到ctk框架类中的入口小部件,这应该是一个简单的任务。请带我去看看

import customtkinter as ctk

ctk.set_appearance_mode("dark")

word = ""

class Frame1(ctk.CTkFrame):
    def __init__(self, master, word):
        super().__init__(master)
        self.word = word

        self.name = ctk.CTkLabel(self, text="Name", fg_color="transparent")
        self.name.grid(row=1, column=0, padx=10, pady=10, sticky="w")

        self.name_x = ctk.CTkEntry(self, width = 300, placeholder_text="")
        self.name_x.grid(row=1, column=1, padx=10, pady=10, sticky="e")
        self.name_x.insert("end", self.word)
   
class App(ctk.CTk):
    def __init__(self):
        super().__init__()

        self.title("CRD Master")
        self.geometry("1000x650")
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        self.acc_no = ctk.CTkEntry(self, width = 60, placeholder_text="Acc. no.")
        self.acc_no.grid(row=0, column=0, padx=10, pady=10, sticky="w")

        self.button = ctk.CTkButton(self, width = 60, text="get", command=self.button_callback)
        self.button.grid(row=0, column=0, padx=10, pady=10, sticky="e")

        frame = Frame1(self, word)
        frame.grid(row=1, column=0, padx=10, pady=(10, 0), sticky="nsw")

    def button_callback(self):
        word = "yay" 
        # Frame1.frame(word)
        # print(word)

app=App()
app.mainloop()

相关问题