1

誰かがテキストを入力すると黒くなる灰色のヒントを含むテキストエントリを作成しようとしています。すでに同様の質問をしていましたが、より広く私がそこにたどり着こうとしましたが、それほど役に立ちませんでした。とにかく、それは他の問題を助けることができます。

私の他の質問: Gtk python エントリの色

4

3 に答える 3

2

ツールキットがプレースホルダー テキストに完全に優れた機能を提供している場合は、CSS や HTML を使用しないでください。

entry.set_placeholder_text('First name')

GTK 3.2 以降で動作します。

于 2012-12-03T20:11:32.693 に答える
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;
}

スクリーンショット

ここに画像の説明を入力

于 2012-12-03T05:57:18.463 に答える
1

この問題を解決するもう 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 の機能が自然に感じられ、期待どおりに実装されていることがわかります。これらのタイプの機能は、自分で実装する場合、正しく修正するのが難しいため、注意が必要です。

于 2012-12-03T06:05:15.083 に答える