【问题标题】:How do I retrieve the ID of a bitmap button in wxpython?如何在 wxpython 中检索位图按钮的 ID?
【发布时间】:2013-03-10 05:56:35
【问题描述】:
self.btid = 0
self.btarray = [] 
self.btarray.append("x")#so that the buttons are appended according to their ids


self.bmt = wx.BitmapButton(panel, btid, pic, pos=(50,50))
self.btarray.append(self.bmt)

self.btid += 1

我使用相同的代码创建多个按钮。以后如何检索单个按钮的 ID?

提前致谢, 斯威亚姆

【问题讨论】:

  • 您没有为按钮设置任何 ID。你不是在定义 btid 而是 self.btid
  • 我在迭代创建多个按钮,每次迭代后btid的值都加1
  • 不,btid 不会在您的代码中递增。 self.btid 是。
  • joaquin,这是我的错误,它的 self.bitd

标签: python wxpython wxwidgets


【解决方案1】:

GetId是获取对象Id的方法。 所以你可以写:

id_of_button_n = button_n.GetId()

但是在您的情况下,这不是必需的,因为您已经将 id 存储为字典 self.btarray 的键!

【讨论】:

  • 我想我会使用 GetId()。这样我希望不要使用数组!
  • 要么将self.btarray 制作成字典,要么预先填写列表self.btarray。否则你的代码将无法工作。您不能像以前那样分配给空列表。使用空列表的方法是append
  • 谢谢!即使我有一组按钮,我如何仅通过单击 GUI 中的按钮来获取单个元素的 id?
【解决方案2】:

这是一个快速而肮脏的脚本,它将向您展示如何获取按钮 ID 和标签。我正在使用普通的 wx.Button 对象,因为没有好的方法可以在 Stack 上包含位图按钮的图像:

import random
import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)
        mainSizer = wx.BoxSizer(wx.VERTICAL)

        i = random.choice(range(5, 10))
        for index, item in enumerate(range(i)):
            num = index + 1
            btn = wx.Button(self, label="Button %s" % num)
            btn.Bind(wx.EVT_BUTTON, self.onClick)
            mainSizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(mainSizer)

    #----------------------------------------------------------------------
    def onClick(self, event):
        """"""
        btn = event.GetEventObject()
        print "%s id => %s" % (btn.GetLabel(), btn.GetId())

########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Random Buttons", size=(1024, 768))
        panel = MyPanel(self)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多