- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图让我的 gtk.Entry 只接受数字。起初,我尝试在事件发生时在标准输出中打印一些内容,但是当我运行脚本时,当我在 gtk.Entry 中输入某些内容时,没有任何反应(pygtk 2.24、python 2.7.2、Windows XP,我也运行了相同的代码在 Linux 中,结果相同)。代码可能有什么问题?
import gtk
class UI:
def delete_event(self, widget, event, data=None):
return False
def destroy(self, widget, data=None):
gtk.main_quit()
def preedit_changed(self, widget, preedit, data=None):
print "preedit_changed"
return True
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy)
self.window.set_border_width(5)
self.entry = gtk.Entry()
self.entry.connect("preedit-changed", self.preedit_changed)
self.window.add(self.entry)
self.window.show_all()
gtk.main()
if __name__ == "__main__":
ui = UI()
最佳答案
我没有意识到这个信号(我倾向于引用我的硬盘上较旧的 GTK+ 文档),但它似乎并没有像你想象的那样做。
深入研究 Gnome 文档后,我发现“预编辑更改”用于处理使用多个按键输入的字符,例如大多数键盘上的重音字母,以及像 ™ 这样的东西,在 Linux 上使用 Compose 键输入: 撰写-t-m。因此,如果您在输入框中输入这些多键字符之一,您将收到“preedit_changed”信号。 OTOH,在我的实验中,返回的 preedit
始终是一个空字符串......
但是您可以使用普通的旧“已更改”信号来做您想做的事情。我用一个仅处理数字的简单示例修改了您的代码,但扩展它以处理 +-.
也很容易;以科学记数法处理数字需要不同的技术。
#! /usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
class UI:
def delete_event(self, widget, event):
return False
def destroy(self, widget):
gtk.main_quit()
def preedit_changed(self, widget, preedit):
value = widget.get_text()
print "preedit_changed: '%s', preedit: '%s'" % (value, preedit)
return True
def activated(self, widget):
value = widget.get_text()
print "activated: '%s'" % value
return True
def changed(self, widget):
value = widget.get_text()
print "changed: '%s'" % value
return True
def digits_only(self, widget):
value = widget.get_text()
#Remove non-digits from string
value = ''.join([c for c in value if c.isdigit()])
widget.set_text(value)
return True
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy)
self.window.set_border_width(5)
self.entry = gtk.Entry()
self.entry.connect("activate", self.activated)
#self.entry.connect("changed", self.changed)
self.entry.connect("changed", self.digits_only)
self.entry.connect("preedit_changed", self.preedit_changed)
self.window.add(self.entry)
self.window.show_all()
gtk.main()
if __name__ == "__main__":
ui = UI()
关于python - python gtk.Entry 中的 "preedit-changed"事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399614/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!