2012-12-02 85 views
1

我正在嘗試使用灰色提示進行文本輸入,該提示在有人向其中輸入文字時會變黑。已經提出了類似的問題,但更廣泛地試圖到達那裏,但沒有得到多少。但無論如何,它可以幫助其他問題。Gtk 3蟒蛇入口顏色

我的其他問題: Gtk python entry color

+0

如果您以前關閉過相同的問題,請不要重新發布相同的問題。獲得答案的更好方法是在前一篇文章中進行更改並重新打開。 – asheeshr

+0

[gtk + python entry color]可能的重複(http://stackoverflow.com/questions/13655829/gtk-python-entry-color) – Junuxx

+0

不是同一個問題... – CondeGil

回答

2

有不同的部分來此解決方案。首先,着色是由css處理的,當輸入框沒有被聚焦時,文字變灰,然後變黑,因爲它獲得焦點。第二部分由您決定,如果您希望實施這一部分,則可以在文本框獲得焦點時清除框中的灰色文本。爲了方便起見,我已經將焦點放入和移出了當前僅打印到終端的事件處理程序。

代碼

from gi.repository import Gtk, Gdk 

def focus_in(*args): 
    print 'focus_in called' 

def focus_out(*args): 
    print 'focus_out called' 

window = Gtk.Window() 
window.connect('destroy', Gtk.main_quit) 
screen = Gdk.Screen.get_default() 
css_provider = Gtk.CssProvider() 
css_provider.load_from_path('style.css') 
priority = Gtk.STYLE_PROVIDER_PRIORITY_USER 
context = Gtk.StyleContext() 
context.add_provider_for_screen(screen, css_provider, priority) 
fname = Gtk.Entry(text='First Name') 
lname = Gtk.Entry(text='Last Name') 
button = Gtk.Button('Submit') 
fname.connect('focus-in-event', focus_in) 
fname.connect('focus-out-event', focus_out) 
vbox = Gtk.VBox() 
vbox.add(fname) 
vbox.add(lname) 
vbox.add(button) 
window.add(vbox) 
window.show_all() 
Gtk.main() 

的style.css

GtkEntry { 
    color: darkgrey; 
} 

GtkEntry:focused { 
    color: black; 
} 

截圖

enter image description here

1

解決此問題的另一種完全不同的方法是利用一些優秀的HTML5功能以及適用於qt和gtk的優秀webkit庫。下面將介紹qt和gtk的使用示例。您希望實現的功能在HTML5中可用作稱爲佔位符的屬性。你可以看到一個不錯的demo of this on w3schools

<input type="text" name="fname" placeholder="First name" /> 

然後你用HTML和webkit實現你的字段和表單。然後有很多方法可以在你的html和python代碼之間進行通信。我發現HTML創建用戶界面更容易和更有文檔記錄。

GTK版本

import gtk, webkit 

HTML = """ 
<!DOCTYPE html><html><body> 
<form> 
    <input type="text" name="fname" placeholder="First name" /><br> 
    <input type="text" name="lname" placeholder="Last name" /><br> 
    <input type="button" value="Submit" /> 
</form> 
</body></html> 
""" 

win = gtk.Window(gtk.WINDOW_TOPLEVEL) 
win.connect('destroy', gtk.main_quit) 
view = webkit.WebView() 
view.load_html_string(HTML, 'file:///') 
win.add(view) 
win.show_all() 
gtk.main() 

截圖

enter image description here

QT版本

import sys 
from PyQt4 import QtCore, QtGui, QtWebKit 

HTML = """ 
<!DOCTYPE html><html><body> 
<form> 
    <input type="text" name="fname" placeholder="First name" /><br> 
    <input type="text" name="lname" placeholder="Last name" /><br> 
    <input type="button" value="Submit" /> 
</form> 
</body></html> 
""" 

app = QtGui.QApplication(sys.argv) 
view = QtWebKit.QWebView() 
view.setHtml(HTML) 
window = QtGui.QMainWindow() 
window.setCentralWidget(view) 
window.show() 
sys.exit(app.exec_()) 

sceenshot

enter image description here

最後說明 當與界面交互,你會看到的WebKit的placeholder功能在,感覺自然和爲預期的方式實現。如果您決定自己實現這些功能,這些類型的功能很難正確糾正,所以這只是要注意的一點。在GTK 3.2和更高版本

entry.set_placeholder_text('First name') 

作品:

1

請不要在工具包提供了一個非常好的設施爲佔位符文本中使用CSS或HTML。