首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我正在尝试让文本小部件函数在python tkinter中正常工作。

我正在尝试让文本小部件函数在python tkinter中正常工作。
EN

Stack Overflow用户
提问于 2019-09-20 10:17:54
回答 1查看 239关注 0票数 0

我正在尝试获取tkinter text小部件中的输入文本,并将其逐行传输到另一个文本小部件对象。

我尝试将文字传递给text.get(起始索引,结束索引)和text.insert(索引,stringToInsert)

代码语言:javascript
运行
复制
from tkinter import *
import re 

class TextCompiler:

    def __init__(self, master):

        self.a = 1.0

        self.frame = Frame(master)
        self.frame.pack()

        self.topLabel = Label(master, text = "Enter text to be compiled: ", bg = "green", fg = "black")
        self.topLabel.pack(side = TOP)

        self.windowIn = Text(master, state=NORMAL, height=20, width=30)
        self.windowIn.pack(side = LEFT)
        self.windowOut = Text(master, height=20, width=30)
        self.windowOut.pack(side = RIGHT)

        self.printButton = Button(self.frame, text="Compile next line?", command = lambda: self.transferPrint(self.a))
        self.printButton.pack(side = BOTTOM)

        self.quitButton = Button(self.frame, text="Quit", command=lambda: self.quitStuff(master))
        self.quitButton.pack(side = BOTTOM)

    def transferPrint(self, a):
            b = self.a + 0.30
            endOfLine = "{0:.2f}".format(b)
            inputText = self.windowIn.get(self.a, endOfLine)
            self.windowOut.insert(self.a, inputText)
            self.a = self.a + 1.0

    def quitStuff(self, master):
        self.frame.quit()
        master.destroy()

root = Tk()
TextCompiler(root)
root.mainloop()

我需要它复制一个整行,并在单击“编译下一行?”时将其传输到第二个文本窗口。按钮。到目前为止,我让它捕获了一行代码,然后没有正确地粘贴它。它将粘贴到上一个字符串的末尾。然后,当我输入一整行文本和第二行文本时,它粘贴得不完整。所以我们应该get(1.0,1.30)和insert(1.0,string),然后get(2.0,2.30) insert(2.0,string) get(3.0,3.30) insert(3.0,string)等等。但它忽略了对参数的文字更改,并且如前所述,没有正确粘贴整行文本……

EN

回答 1

Stack Overflow用户

发布于 2019-09-20 10:41:24

有两个问题。首先,索引不是浮点数,您不应该对它们进行浮点数学运算。索引是line.character形式的字符串。

例如,在浮点数中,1.3和1.30是相同的。作为索引,"1.3“表示第一行的第三个字符,"1.30”表示第一行的第三十个字符。

此外,您忽略了复制每行末尾的换行符。您不能在另一个窗口的第2行插入,除非第1行以换行符结束,如果第2行不以换行符结束,则不能在第3行插入,以此类推。

我不知道你的意图是什么,所以很难推荐一个解决方案。例如,您是否真的希望只复制一行的前30个字符,或者您的目标是复制整个行?

如果只需要一行的前30个字符,并将其复制到另一个窗口中的新行,则需要在复制时插入新行。例如:

代码语言:javascript
运行
复制
self.windowOut.insert("end", inputText+"\n")

如果您的目标只是复制整行,则可以使用修饰符复制整行加上尾随的换行符。或者,只复制整行,而不复制换行符,就像上面一样,在复制时可以附加一个换行符。

下面是如何获取完整行的方法:

代码语言:javascript
运行
复制
end = "{} lineend".format(self.a)

下面是如何获得完整的行加尾随的换行符:

代码语言:javascript
运行
复制
end = "{} lineend+1c".format(self.a)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58020950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档