誰かがテキストを入力すると黒くなる灰色のヒントを含むテキストエントリを作成しようとしています。すでに同様の質問をしていましたが、より広く私がそこにたどり着こうとしましたが、それほど役に立ちませんでした。とにかく、それは他の問題を助けることができます。
私の他の質問: Gtk python エントリの色
誰かがテキストを入力すると黒くなる灰色のヒントを含むテキストエントリを作成しようとしています。すでに同様の質問をしていましたが、より広く私がそこにたどり着こうとしましたが、それほど役に立ちませんでした。とにかく、それは他の問題を助けることができます。
私の他の質問: Gtk python エントリの色
ツールキットがプレースホルダー テキストに完全に優れた機能を提供している場合は、CSS や HTML を使用しないでください。
entry.set_placeholder_text('First name')
GTK 3.2 以降で動作します。
このソリューションにはさまざまな部分があります。まず、入力ボックスがフォーカスされていない場合はテキストをグレーに、フォーカスを得るとテキストを黒く着色する css によってカラーリングが処理されます。2 番目の部分は、テキスト ボックスがフォーカスを取得したときにボックス内の灰色のテキストをクリアしたいという実装を希望する場合は、あなた次第です。便宜上、現在ターミナルに出力するだけのイベント ハンドラーにフォーカスを置いています。
コード
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;
}
スクリーンショット
この問題を解決するもう 1 つのまったく異なるアプローチは、いくつかの優れた 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 の機能が自然に感じられ、期待どおりに実装されていることがわかります。これらのタイプの機能は、自分で実装する場合、正しく修正するのが難しいため、注意が必要です。