【问题标题】:pyGTK - gtk.Entry in gtk.Dialog Yields no TextpyGTK - gtk.Dialog 中的 gtk.Entry 没有文本
【发布时间】:2017-09-01 10:15:01
【问题描述】:

在 pyGTK(2.22 - 版本非常重要)中,我遇到了下面详述的错误。我认为这是一个 pyGTK 问题,但我可能是错的,不想报告非错误。

基本上,我使用.get_text()gtk.Entry() 中提取文本,即使小部件中有文本,这也会返回一个空字符串。以下是一些相关代码(使用 NOOP 定义使其可运行):

import gtk

class Item: pass

def tofile(item): pass

# Described issues begin below

class ItemAddDialog:
    "A dialog used when adding a menu item"
    def __init__(self):
        self.dialog = gtk.Dialog(title="Adding menu item...", buttons=btns)
        self.fname, self.name, self.icon, self.exe, self.cats = [gtk.Entry() for i in range(5)]
        self.obs = (self.fname, self.name, self.icon, self.exe, self.cats)
        self._config()

    def _config(self):
        _ = self.dialog.vbox
        map(lambda x: _.pack_start(x, False, False, 0), self.obs)
        map(lambda x: x.show(), self.obs)
        map(lambda x: x[1].set_text(x[0]), zip(("Filename", "Name in Menu", "Icon", "Command", "Categories (; Delimited)"), self.obs))

    def run(self):
        r = self.dialog.run()
        self.dialog.destroy()
        print _quote(str(r))
        if (int(r) == 1): i = Item(self.fname.get_text(), self.name.get_text(), self.icon.get_text(), self.exe.get_text(), self.cats.get_text())
        print str(i)
        tofile(i)

【问题讨论】:

    标签: python pygtk gtkentry


    【解决方案1】:

    destroy() 会导致小部件及其子项无法实现,这意味着条目会丢失其文本。在销毁对话框(或任何其他小部件)之前,请务必阅读它的状态。

    您的代码还有其他一些小问题:

    1. 为清楚起见,您应该用简单的循环替换地图:

      map(lambda x: _.pack_start(x, False, False, 0), self.obs)

      for x in self.obs: _.pack_start(x, False, False)

      map(lambda x: x[1].set_text(x[0]), zip(("Filename", "Name in Menu", "Icon", "Command", "Categories (; Delimited)"), self.obs))

      for txt, x in zip(("Filename", "Name in Menu", "Icon", "Command", "Categories (; Delimited)"), self.obs)): x.set_text(txt)

    2. 不要对所有子级调用show,只需对父级调用show_all(本例中为对话框)。

    3. 我认为您不必将对话结果转换为 int。此外,幻数是不好的。定义一个常量,或者使用a predefined one

    【讨论】:

    • 我喜欢show_all 的想法,但map() 仍然存在。 LISP 规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多