【问题标题】:python tkinter disable line break in text widgetpython tkinter 在文本小部件中禁用换行符
【发布时间】:2016-01-15 15:27:22
【问题描述】:

在下面的代码中,我正在寻找一种方法来禁用 Text 小部件中的换行符。我会简单地使用一个 Entry 小部件,但是,Entry 没有 UNDO 功能。

当我在 Text 小部件中按 Enter 键时,会根据需要调用 parse 函数,但它也会转到下一行。

任何帮助将不胜感激,谢谢。

#

from Tkinter import *

class Application(Frame):
    def __init__(self):
        self.master = Tk()
        self.master.geometry("300x200")

        Frame.__init__(self, self.master)
        self.create_widgets()

    def create_widgets(self):
        self.master.bind('<Return>', self.parse)
        self.grid()

        w1 = Text(self, undo=True, height=1, width=26,wrap=NONE)
        w1.grid(row=0, column=1, padx=5, pady=5, sticky=W)

        self.submit = Button(self, text="Submit")
        self.submit.bind('<Button-1>', self.parse)
        self.submit.grid(row=0, column=2, sticky=E)

    def parse(self, event):
        print("You clicked?")

    def start(self):
        self.master.mainloop()


Application().start()

【问题讨论】:

  • 不要忘记用户也可以将代码粘贴到文本小部件中,因此您需要处理他们使用换行符粘贴内容的情况。

标签: python python-2.7 tkinter


【解决方案1】:

您可以在事件绑定结束时使用return 'break' 来阻止 Tkinter 执行其默认操作:

def parse(self, event):
    print("You clicked?")
    return 'break'

您还需要专门将返回绑定到条目:

w1 = Text(self, undo=True, height=1, width=26,wrap=NONE)
w1.grid(row=0, column=1, padx=5, pady=5, sticky=W)
w1.bind('<Return>', self.parse)

【讨论】:

  • 谢谢,我刚刚尝试过,但它仅在光标位于字符串开头时才有效,如果我将它放在 Text 小部件中的其他任何位置并按 ENTER,它会像以前一样插入换行符。
【解决方案2】:

在你的解析函数中使用string.strip(s[, chars]),像这样:

from Tkinter import *

START = "1.0"
END = "end"

class Application(Frame):
    def __init__(self):
        self.master = Tk()
        self.master.geometry("300x200")

        Frame.__init__(self, self.master)
        self.create_widgets()

    def create_widgets(self):

        self.w1 = Text(self, undo=True, height=1, width=26,wrap=NONE)
        self.w1.bind("<Return>", self.parse)

        self.submit = Button(self, text="Submit")
        self.submit.bind('<Button-1>', self.parse)

        self.grid()
        self.w1.grid(row=0, column=1, padx=5, pady=5, sticky=W)
        self.submit.grid(row=0, column=2, sticky=E)

    def parse(self, event):
        parsed_str = self.w1.get(START, END).strip()
        self.w1.delete(START, END)
        print parsed_str

if __name__ == '__main__':
    myapp = Application()
    myapp.mainloop()

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2020-01-29
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多