2016-11-25 99 views
1

這是我的問題,我無法在其他地方找到答案。我想在Gtk textview(python3)中顯示一些文本,並在每段文本之後換行。當我使用「\ n」時,它顯示「\ n」而不是實際添加新行。有沒有辦法可以解決這個問題?如何在Gtk textview中添加新行?

這應該是我的問題的可重複的版本,然後我的輸出...用GTK窗口

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk 

records =() 
tv = Gtk.TextView() 

records += ("a", "\n", "b", "\n", "c", "\n") 
tb = tv.get_buffer() 
tb.set_text(str(records)) 

sw = Gtk.ScrolledWindow() 
sw.set_size_request(300,400) 
sw.add(tv) 

w = Gtk.Window() 
w.add(sw) 
w.show_all() 

Gtk.main() 

電流輸出(PS我不是一個有經驗的程序員。):

('a','\n','b', '\n', 'c') 
用GTK窗口

所需的輸出:

'a' 
'b' 
'c' 

回答

1

我已經通過使用%s字符串格式顯示了一種解決此問題的方法。下面是我在實際上使用的代碼示例:

tv = Gtk.TextView() 
    for record in records: 
     records_str += "Title: %s \nAuthors: %s \nSource: %s\n\n" %(record.get("TI"), ", ".join(record.get("AU")), record.get("SO")) 

    tb = tv.get_buffer() 
    tb.set_text("".join(records_str)) 

這版畫「標題」,「作者」和線「源代碼」。

1

你需要加入的數據在一個名爲變量在像這樣的字符串:

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk 

records =() 
tv = Gtk.TextView() 

records += ("a", "\n", "b", "\n", "c", "\n") 
tb = tv.get_buffer() 
# join in one single string 
tb.set_text("".join(records)) 


sw = Gtk.ScrolledWindow() 
sw.set_size_request(300,400) 
sw.add(tv) 

w = Gtk.Window() 
# Don't forget to connect your window's close button 
# to Gtk.main_quit signal, or whatever the signal you want 
w.connect("delete-event", Gtk.main_quit) 
w.add(sw) 
w.show_all() 

Gtk.main() 

基於GTK窗口內輸出將是:

a 
b 
c 
+0

謝謝,這做了部分工作,但不完全,因爲我的實際代碼竟然是一個更復雜一點! – Fliss

+0

您可以編輯您的問題並更新您的代碼的複雜程度,我會更新我的答案以幫助您。別客氣 –

2

添加到textbuffer,而不首先讀取它,可使用iters(其排序的點來實現緩衝區的內容)。在開始(get_start_iter)在一定

  • 偏移量(以字符)插入:例如,你可以在緩衝區的末尾asking for an iter at the end補充:

    bff = Gtk.TextBuffer() 
        view = Gtk.TextView(buffer = bff) 
        bff.set_text("This is the beginning\n") 
    
        iter = bff.get_end_iter() 
        bff.insert(iter, "And this is a newly inserted line\n") 
    

    您還可以插入文本(get_iter_at_offset

  • 在某行()
  • 在一定的「標記」你在文本離開(get_iter_at_mark)等...