Gtk 3 python入门颜色

时间:2012-12-02 13:18:26

标签: python python-2.7 gtk gtk3

我正在尝试在其中创建带有灰色提示的文本条目,当有人将文本输入其中时,该文本条目会变黑。我已经提出了一个类似的问题,但更广泛地说是试图通过我来实现目标,但却没有那么多。但无论如何,它可以帮助解决其他问题。

我的另一个问题: Gtk python entry color

3 个答案:

答案 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;
}

<强>截图

enter image description here

答案 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()

<强>截图

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功能以一种感觉自然且符合预期的方式实现。如果你决定自己实现这些类型的功能很难纠正,所以这只是需要注意的事项。

答案 2 :(得分:1)

当工具包为占位符文本提供非常好的工具时,请不要使用CSS或HTML:

entry.set_placeholder_text('First name')

适用于GTK 3.2及更高版本。