2013-01-19 122 views
0

我有一些簡單的代碼不能按預期方式工作。首先,文檔說Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY).set_text()應該只能接受一個帶長度參數選項的參數,但它不起作用(見下文)。最後,粘貼一個unicode °符號會在嘗試從剪貼板中檢索文本時中斷文本設置(並且不會粘貼到其他程序中)。它提供了這樣的警告:python與Gtk3沒有正確設置unicode

GDK-WARNING **:從UTF8_STRING

>>> from gi.repository.Gtk import Clipboard 
>>> from gi.repository.Gdk import SELECTION_PRIMARY 
>>> d='\u00B0' 
>>> print(d) 
° 
>>> cb=Clipboard 
Clipboard 
>>> cb=Clipboard.get(SELECTION_PRIMARY) 
>>> cb.set_text(d) #this should work 
Traceback (most recent call last): 
    File "<ipython-input-6-b563adc3e800>", line 1, in <module> 
    cb.set_text(d) 
    File "/usr/lib/python3/dist-packages/gi/types.py", line 43, in function 
    return info.invoke(*args, **kwargs) 
TypeError: set_text() takes exactly 3 arguments (2 given) 

>>> cb.set_text(d, len(d)) 
>>> cb.wait_for_text() 

(.:13153): Gdk-WARNING **: Error converting selection from UTF8_STRING 
'\\Uffffffff\\Uffffffff' 

回答

1

從文檔錯誤轉換選型Gtk.Clipboard

它看起來像set_text需要第二個參數的方法。第一個是文本,第二個是文本的長度。或者,如果您不想提供長度,則可以使用-1來讓它計算長度本身。

gtk.Clipboard.set_text

def set_text(text, len=-1) 

文本:字符串。

len:文本的長度,以字節爲單位或-1,計算長度。

我已經在Python 3上測試過它,它與cb.set_text(d, -1)一起使用。

0

在Python 3.4。這僅僅是GtkEntryBuffers所必需的。如果GtkTextBuffer set_text沒有第二個參數。

例1照常工作:

settinginfo = 'serveradres = ' + server + '\n poortnummer = ' + poort 
GtkTextBuffer2.set_text(settinginfo) 

例題需要額外的參數LEN:

ErrorTextDate = 'choose earlier date' 
GtkEntryBuffer1.set_text(ErrorTextDate, -1) 
+1

檢查我的代碼後,我發現,只需要空textbuffers額外的參數。如果緩衝區預填充了初始文本,則len參數不會被要求。使用Glade構建GUI並在指定的文本塊中填充文本時就是這種情況。 –