繁体   English   中英

我在我正在使用 tkinter 的 GUI 中创建了一个“清除”按钮。 如何让这个按钮清除文本?

[英]I've created a “clear” button in my GUI I'm working on using tkinter. How do I get this button to clear text?

我遇到的问题是在按下清除按钮时尝试清除输入的文本。 我知道有一种叫做命令绑定的东西,并传入一个 function 可以清除文本作为对命令的引用。 我对 go 这样做有点困惑。

以下是相关代码:

class Window(Frame):
    def __init__(self, master):
        super().__init__(master)
        master.title('Learning Python')
        master.configure(background='black')
        master.geometry('900x200')
        master.resizable(0, 0)


class Submit(Button):
    def __init__(self, master):
        super().__init__(master)
        self.configure(text='Submit', background='black', foreground='light green', highlightthickness=0,
                       border=0)


class Clear(Button):
    def __init__(self, master):
        super().__init__(master)
        self.configure(text='Clear', background='black', foreground='light green', highlightthickness=0,
                       border=0)


class ProgressBar(ttk.Progressbar):
    def __init__(self, master):
        super().__init__(master)
        self.config(orient='horizontal', maximum=1462, mode='determinate')


class PagesRead(Label):
    def __init__(self, master):
        super().__init__(master)
        self.config(text='How many page(s) did you read?', background='black', foreground='light green')


class EntryBox(Entry):
    def __init__(self, master):
        super().__init__(master)


if __name__ == '__main__':
    root = tk.Tk()
    app = Window(root)
    bar = ProgressBar(root)
    bar.pack(fill=tk.BOTH)
    pages = PagesRead(root)
    pages.pack()
    entry = EntryBox(root)
    entry.pack()
    submit = Submit(root)
    submit.pack()
    clear = Clear(root)
    clear.pack()
    app.mainloop()
class Clear(Button):
    def __init__(self, master):
        super().__init__(master)
        self.configure(
        command=clear_callback
        text='Clear',
        background='black',
        foreground='light green',
        highlightthickness=0,
        border=0
        )

然后你可以做这样的事情:

def clear_callback(self, event=None):
    self.entry.delete(0, "end")

您还可以绑定事件, 此页面上有一些很棒的信息

显式绑定以 tkinter 事件 object 的形式传递附加参数,因此有时您可能需要使用 kwarg 或 lambda 表达式来传递额外参数

app.bind(
    "<Return>",
    lambda: clear_callback(event)
)

希望这会有所帮助。 干杯。

您已经创建了小部件的实例。 因此,您只需要创建一个command来清除entry中的内容:

if __name__ == '__main__':
    root = tk.Tk()
    ...
    clear = Clear(root)
    clear.pack()
    clear.config(command=lambda: entry.delete(0,"end"))
    app.mainloop()

即使您已经为 Entry 创建了一个新的 class,它仍然保留了 Entry 方法。 所以你可以简单地调用 delete 方法:

clear = Clear(root)
clear.config(command=lambda:entry.delete(0, 'end'))
clear.pack()

根据您的喜好,您可以改为为EntryBox class 创建一个clear()方法并在不带参数的情况下调用它:

class EntryBox(Entry):
    def __init__(self, master):
        super().__init__(master)

    def clear(self):
        self.delete(0, 'end') 

然后将按钮命令到此方法:

clear = Clear(root)
clear.config(command=entry.clear)
clear.pack()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM