python - 我正在尝试让 Text 小部件功能在 python tkinter 中正常工作
问题描述
我正在尝试在 tkinter 文本小部件中获取输入文本并将其逐行传输到另一个文本小部件对象。
我尝试将文字传递给 text.get(start index, end index) 和 text.insert(index, stringToInsert)
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) 等等..但是它忽略了文字更改参数,如前所述,未正确粘贴整行文本...
解决方案
有两个问题。首先是索引不是浮点数,您不应该对它们进行浮点数学运算。索引是格式line的字符串。字符。
例如,在浮点数中,1.3 和 1.30 是相同的。作为索引,“1.3”代表第一行的第三个字符,“1.30”代表第一行的第三十个字符。
此外,您忽略了在每行末尾复制换行符。除非第 1 行以换行符结束,否则不能在另一个窗口的第 2 行插入,如果第 2 行没有以换行符结束,则不能在第 3 行插入,依此类推。
我不知道您的意图是什么,因此很难推荐解决方案。例如,您真的只想复制一行的前 30 个字符,还是您的目标是复制整行?
如果您只需要一行的前 30 个字符并将其复制到另一个窗口中的新行,则需要在复制时插入换行符。例如:
self.windowOut.insert("end", inputText+"\n")
如果您的目标只是复制整行,则可以使用修饰符复制整行加上尾随换行符。或者,只复制不带换行符的整行,就像上面一样,您可以在复制时附加换行符。
以下是获取完整行的方法:
end = "{} lineend".format(self.a)
以下是获取整行加上尾随换行符的方法:
end = "{} lineend+1c".format(self.a)
推荐阅读
- python - 在 MacOS Mojave 上从 PyInstaller 运行应用程序后如何修复 msgcat::mc 错误?
- python - boto3 dynamodb batch_writer 如何执行回滚
- docker - 一台主机上有两个带有 Traefik 的 docker 容器
- php - 如何在特定数据的 foreach 中进行下拉
- javascript - 具有动态绑定的 iFrame 不起作用
- android - 在我移动的方向上旋转地图框中的地图
- c# - WPF为同一个目标多次触发不同的故事板
- solr - 在 Apache Solar 中的两个不同集合中进行排序搜索
- linux - 如何在 Linux 上查找 Qt 包含头文件的位置
- c++ - 无法添加到全局变量