我正在尝试在其中创建带有灰色提示的文本条目,当有人将文本输入其中时,该文本条目会变黑。我已经提出了一个类似的问题,但更广泛地说是试图通过我来实现目标,但却没有那么多。但无论如何,它可以帮助解决其他问题。
我的另一个问题: Gtk python entry color
答案 0 :(得分: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;
}
<强>截图强>
答案 1 :(得分: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()
<强>截图强>
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 强>
最后的笔记
在与界面交互时,您会看到webkit中的placeholder
功能以一种感觉自然且符合预期的方式实现。如果你决定自己实现这些类型的功能很难纠正,所以这只是需要注意的事项。
答案 2 :(得分:1)
当工具包为占位符文本提供非常好的工具时,请不要使用CSS或HTML:
entry.set_placeholder_text('First name')
适用于GTK 3.2及更高版本。