我正在尝试创建一个带有灰色提示的文本条目,当有人在其中输入文本时它会变黑。已经提出了类似的问题,但更广泛地试图通过我到达那里,但没有得到那么多。但无论如何,它可以帮助解决其他问题。
我的另一个问题: Gtk python entry color
我正在尝试创建一个带有灰色提示的文本条目,当有人在其中输入文本时它会变黑。已经提出了类似的问题,但更广泛地试图通过我到达那里,但没有得到那么多。但无论如何,它可以帮助解决其他问题。
我的另一个问题: Gtk python entry color
这个解决方案有不同的部分。首先,着色由 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()
样式.css
GtkEntry {
color: darkgrey;
}
GtkEntry:focused {
color: black;
}
截屏
当工具包为占位符文本提供了非常好的工具时,请不要使用 CSS 或 HTML:
entry.set_placeholder_text('First name')
适用于 GTK 3.2 及更高版本。
解决此问题的另一种完全不同的方法是利用一些出色的 HTML5 功能和可用于 qt 和 gtk 的出色 webkit 库。下面将介绍 qt 和 gtk 的使用示例。您想要实现的内容在 HTML5 中作为称为占位符的属性提供。你可以在 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_())
截图
最后的注释
当与界面交互时,您会看到placeholder
webkit 中的功能以一种感觉自然且符合预期的方式实现。如果您决定自己实现这些类型的功能,则很难正确纠正它们,所以这只是需要注意的事情。