【问题标题】:using text.get to obtain a string and characters - python使用 text.get 获取字符串和字符 - python
【发布时间】:2016-07-08 03:21:54
【问题描述】:

我在文本小部件中使用 text.get 命令从列表中获取第一组数字,但由于我的数字包含字符(特别是破折号 -)我没有得到完整的字符串.另外,我的列表虽然都有破折号,但长度不同,所以它不像说明起点 + x 个字符那么简单。

即

123-678

1234-456

145-12341

我想要获得的是整个字符串,包括第一组数字、破折号,然后是下一组数字,然后忽略任何空格

我一直在使用:

getnumber=text.get("start and end")

并且已经能够打印整行文本、整个文本小部件,并且在上面的第一个示例中只有“123”。似乎有很多例子,但我找不到适用于我所追求的例子,因此我的问题

我使用的代码是

self.outputbox.tag_configure("dwg", foreground="white", background="red")  
self.outputbox.tag_remove("dwg", "1.0", "end")
self.outputbox.tag_add("dwg", "insert linestart", "insert lineend")
getdwg=self.outputbox.get("insert linestart", "insert wordend")
   print(getdwg)

但是,当我单击文本框的区域并打印输出时,它只会打印一小部分信息,尽管我注意到如果在仅打印的“1234”区域中单击例如 1234-34578,如果单击破折号,则打印 1234-,如果单击 34578 区域,则打印 1234-34578(根据需要)。但是,无论单击的字符串区域如何,我都希望此输出发生

【问题讨论】:

  • 你有什么问题?你什么都没问。
  • @BryanOakley appologies,我认为我最初的帖子已经足够了,但已经澄清了。
  • 您的编辑根本没有帮助。您需要向我们展示一些代码,以及您对代码有什么问题。你试过什么?结果如何?它与您的预期有何不同?
  • @BryanOakley,如上更新。我意识到对于一个经验丰富的程序员来说这可能是非常微不足道的,但对于学习信息的人来说并不总是容易找到或理解的:)
  • 问题不是小事,问题是问题不清楚。你什么都没问。您只需说“我想要 x”,而不显示任何代码或任何研究。根本没有办法知道你在苦苦挣扎。

标签: python-3.x text tkinter widget


【解决方案1】:

这行代码无效:

getnumber=text.get("start and end")

字符串"start and end" 不是有效索引。如果要获得单行,则必须为行的开头提供有效索引,然后可以为第二个索引附加"lineend" 提供相同的索引。例如,要获取第 1 行,您可以这样做:

getnumber = text.get("1.0", "1.0 lineend")

如果在行首和行尾可能有多余的空格,您可以将它们去掉作为第二步:

getnumber = getnumber.strip()

【讨论】:

  • 我意识到“开始和结束”的语法是不正确的,我把它放在那里(现在意识到它很可能非常令人困惑)以显示我正在尝试做的事情。我目前正在使用 text.get("insert linestart", "insert wordend") 但没有得到预期的效果(即只有破折号打印之前的数字)。索引似乎对我也不起作用,我假设是因为我单击的项目位于文本小部件的不同行上。
  • @LMP2016:我们永远不会知道您是否选择不与我们共享您的代码。请放心,tkinter 文本小部件索引按文档说明工作,并且非常可靠。
  • @LMP2016:请不要在评论中发布代码。编辑你的问题并把它放在那里。
  • 已将回复添加到您的回复底部(等待同行评审)我会将其复制到我的原始帖子中
【解决方案2】:

可能是您使用了错误的方法或使用了错误的索引。这是一个简单的代码,展示了如何得到你想要的:

import Tkinter as Tk    

root = Tk.Tk()
text = Tk.Text(root)
text.insert(Tk.INSERT, "123-678\n")
text.insert(Tk.END, "1234-456\n")
text.insert(Tk.END, "145-12341")
text.pack()    
print text.get('1.0', '1.7') # First line
print text.get('2.0', '2.8') # Second line
print text.get('3.0', '3.9') # Third line

root.mainloop()

演示:

如果你运行上面的程序,你会得到这个:

并且这些行正确打印在终端上:

【讨论】:

  • 因为我的文本小部件在多行上显示文本(行数可能会有所不同),我认为使用索引对我不起作用。我的代码是
    getdwg=self.dwgoutputbox.get("insert linestart", "insert wordend") print(getdwg) 这会产生
    699 应该是 699-123 1851应该是 1851-345
    1849 应该是 1849-267
    我的文本小部件中有更多行,但这只是一个示例
    但是我注意到如果我在 699 上单击鼠标-123 但它打印的数字的“123”部分正确
【解决方案3】:

理想情况下,让程序为每一行选择文本会很好,当它遇到空白时停止,但这超出了我的专业知识。相反,我解决了一个更糟糕的情况并实现了linestart+10c,因为我的文本小部件在打印数据之间有标签,所以效果很好。 编写的代码是

        self.DwgOutputBox.tag_remove("dwg", "1.0", "end")
        self.DwgOutputBox.tag_configure("dwg", background="red")
        self.DwgOutputBox.tag_add("dwg", "insert linestart", "insert lineend")
        getdwg=self.DwgOutputBox.get("insert linestart", "insert linestart+10c")
        getdwg=getdwg.strip()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2021-07-09
    • 2014-12-13
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多