【问题标题】:Getting values from multiple GTK spinboxes从多个 GTK 旋转框获取值
【发布时间】:2012-05-03 21:54:13
【问题描述】:

图片:http://dl.dropbox.com/u/4900888/GUI.png 由于“新用户限制”,源和 UI 在 cmets 中

如果我完全误解了这个网站的内容,我很抱歉,但我有一个问题。

当按下左下角的按钮时,我想从三个旋转框中获取值并将其保存为变量,以便在按钮触发的函数中使用。 对于您将如何做到这一点,我真的很空白。 感谢您提供任何帮助,如果需要,可以提供其他信息。

编辑: 我正在使用 Python,并通过 Glade 使用 Gtk+。

PS: Stack Overflow 是否有任何代码共享站点偏好,例如 pastebin 等?

【问题讨论】:

  • 这似乎是某种 C 语言,我使用的是 Python,和(我认为)Gtk+。我会将此信息添加到第一篇文章中。
  • 您能否提供您用于创建界面的代码,以便我们将其拆开看看是什么。
  • 来源:dl.dropbox.com/u/4900888/Deadliner.py UI:dl.dropbox.com/u/4900888/Mockup.glade UI 是使用 Glade 制作的,因此您可能需要 Glade 才能理解它。
  • 您似乎选择了一个答案,但您的问题还没有解决。该网站的一种工作方式是未回答(又称未解决)的问题得到更多关注。您通常希望等到获得解决问题的答案后再单击该检查大纲。

标签: python gtk


【解决方案1】:

简短的回答是:使用旋转按钮的get_value_as_int() 方法。

但是,我怀疑您的实际问题是获得对旋转按钮的引用以调用get_value_as_int()。从your code 我看到您正在使用gtk.Builder 来构建您的用户界面。

访问小部件

Handler 实例中保留对特定小部件的引用:

    handler = Handler()
    builder = Gtk.Builder()
    ...
    # Store references to widgets in `handler`
    for widget_name in ('sbtn_days', 'sbtn_hours', 'sbtn_minutes'):
        setattr(handler, widget_name, builder.get_object(widget_name))
    # The above is equivalent to the following:
    handler.sbtn_days = builder.get_object('sbtn_days')
    ...

    # In signal handling code:
    days = self.sbtn_days.get_value_as_int()

或者您可以在 Handler 实例中保留对 builder 的引用:

    builder = Gtk.Builder()
    handler = Handler()
    handler.builder = builder
    ...

    # In signal handler code:
    sbtn_days = self.builder.get_object('sbtn_days')
    days = sbtn_days.get_value_as_int()

注意事项

在上面的代码中,

  • 我假设你几天的旋转按钮被命名为sbtn_days。根据需要进行调整。
  • 我只演示了访问sbtn_days 及其值。可以通过类似方式访问其他按钮。

附:你的代码还有很多其他问题使它不能“好”。

【讨论】:

  • 谢谢,我看看能不能让它工作。我是否正确假设我不需要编辑 UI 文件,保存可能的名称更改?
  • 我也读对了吗?获取值的完整行类似于(days = self.Handler().Gtk.Builder().get_object('sbtn_days').get_value_as_int()
  • @Dorako:是的,不需要更改您的 UI 文件。 “全线”取决于您选择的上述方法。在信号处理函数中,它可以是 self.sbtn_days.get_value_as_int() 或 `self.builder.get_object('sbtn_days').get_value_as_int()。
  • class Handler: builder = Gtk.Builder() handler = Handler() handler.builder = builder #pressing the "Create Deadline" button activates this def onCreateDeadline(self, button): global fU global sU global has_deadline has_deadline = True #Fetch the value of sbtn_days sbtn_days = self.builder.get_object('sbtn_days') days = sbtn_days.get_value_as_int() 我是不是加错地方了? NameError:未定义名称“处理程序”编辑:哇,我猜 cmets 中没有换行符或缩进。
  • 请将您的代码发布到可以编辑的地方并在此处粘贴链接。
猜你喜欢
  • 2016-02-04
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
相关资源
最近更新 更多