2016-07-08 977 views
-1

我在文本小部件中使用text.get命令從列表中獲取第一組數字,但由於我的數字包含字符(特別是短劃線 - )我沒有得到完整的字符串。另外,我的列表中雖然都有破折號,但它們的長度不同,所以它不像說明一個起點+ x個字符那麼簡單。使用text.get獲取字符串和字符 - python

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-34578被點擊在只打印的'1234'區域,如果我點擊破折號然後1234-打印,如果我點擊34578區域,然後點擊1234-34578打印(根據需要)。但是,我希望這個輸出發生,而不管字符串的區域是點擊

+0

你的問題是什麼?你沒有問過任何問題。 –

+0

@BryanOakley appologies,我認爲我的第一篇文章是足夠的,但已澄清。 – LMP2016

+0

你的編輯根本沒有幫助。你需要向我們展示一些代碼,以及你對代碼有什麼問題。你有什麼嘗試?結果是什麼?它與你期望的有什麼不同? –

回答

0

這行代碼是無效的:

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

字符串"start and end"是不是一個有效的索引。如果你想得到一條線,你必須爲該線的開始提供一個有效的索引,然後你可以給第二個索引附加"lineend"。例如,要獲得第1行,你可以這樣做:

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

如果有開始和行尾潛在多餘的空格,你可以帶他們過作爲第二步:

getnumber = getnumber.strip() 
+0

我意識到「開始和結束」的語法是不正確的,我把它放在那裏(現在意識到它最可能非常混亂),以顯示我正在嘗試做什麼。我目前正在使用text.get(「插入linestart」,「插入wordend」),但沒有獲得所需的效果(即僅在短劃線打印之前的數字)。索引似乎沒有爲我工作,即時通訊假設,因爲我點擊的項目是在文本小部件的不同行。 – LMP2016

+0

@ LMP2016:我們永遠不會知道您是否選擇不與我們分享您的代碼。請放心,tkinter文本小部件索引按記錄工作,並且非常可靠。 –

+0

@ LMP2016:請不要在評論中張貼代碼。編輯你的wuestion並把它放在那裏。 –

0

可能是你使用了錯誤的方法,或者你使用了錯誤的索引。下面是一個簡單的代碼,顯示如何得到你想要的東西:

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() 

演示:

如果你運行上面的程序,你會得到這樣的:

enter image description here

線條正確地打印在終端上:

enter image description here

+0

作爲我的文本小部件顯示多行文本(行數可能會有所不同)我不認爲使用索引將適用於我。我的代碼如下:
getdwg = self.dwgoutputbox.get(「insert linestart」,「insert wordend」) print(getdwg)並且這將產生
699它應該是699-123 1851它應該是1851-345
1849它應該是1849-267
我的文本小部件中有更多行,但這僅僅是一個示例
但是我注意到如果在699-123上單擊我的鼠標,但它打印的數字的「123」部分正確 – LMP2016

0

理想情況下,讓程序爲每一行選擇文本,在遇到空閒空間時停止,但這超出了我的專業知識,本來是很不錯的。相反,我制定了一個更糟糕的案例,並實施了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()