如何检测按下了哪个按钮以调用特定于它的命令?

Y0SHI0N

我正在尝试制作一个自动售货机用户界面,该界面具有使用以下代码动态生成的25个按钮:

    def retrieve_tiem(): #SQL query to reteive item into Item_List[]

    ROWS = COLS = 5
    MAX_ITEMS = ROWS * COLS
    frames = []
    for i in range(MAX_ITEMS):
        frames.append(Frame(store_canvas, width=1520 / COLS, height=1030 / ROWS, bd=2, relief=SOLID))
        frames[-1].grid(row=i // COLS, column=i % COLS)
        frames[-1].pack_propagate(False)

    def update_list():
        label_font = ("Arial", 15)
        for i,frame in enumerate(frames):
            for w in frame.winfo_children():
                w.destroy()
            if i < len(Item_list):
                item = Item_list[i]
                Button(frame).pack(fill="both", expand=1)
                Label(frame, text=Item_list[i], font=label_font, bg="darkgreen", fg="yellow").pack(fill="x")

我如何获得此代码及其bg的上下文在此处我希望能够使用该按钮来调用顶级窗口小部件,以显示与该按钮相对应的正确的待售商品。但是,此代码生成的网格将根据用户选择的过滤器选项动态减少或增加。这意味着没有按钮可以保存每次要调用的相同“ ID”。我先在网上看了一下,发现这个问题有点相似。唯一的缺点是该帖子中的按钮是固定的,不会移动。我有办法达到上述效果吗?同样对于类似的链接文章,这可能对我有用,但我只是在逻辑上分析了它错了吗?非常感谢所有答案。

编辑:对于那些希望快速,重现按钮的行为的结果的人,基于过滤器的项目数量增加或减少时,代码如下:

from tkinter import *
import random

root = Tk()

store_canvas = Frame(root)
store_canvas.pack()

# create the 25 frames
ROWS = COLS = 5
MAX_ITEMS = ROWS * COLS
frames = []
for i in range(MAX_ITEMS):
    frames.append(Frame(store_canvas, width=1520/COLS, height=1030/ROWS, bd=2, relief=SOLID))
    frames[-1].grid(row=i//COLS, column=i%COLS)
    frames[-1].pack_propagate(False)

# function to simulate retrieving data from database table
def retrieve_tiem():
    return [f"Item #{i+1}" for i in range(random.randint(1,MAX_ITEMS))]

# function to show the retrieved items
def update_list():
    Item_list = retrieve_tiem()
    label_font = ("Arial", 20)
    for i, frame in enumerate(frames):
        for w in frame.winfo_children():
            w.destroy()
        if i < len(Item_list):
            item = Item_list[i]
            Button(frame).pack(fill="both", expand=1)
            Label(frame, text=item, font=label_font, bg="darkgreen", fg="yellow").pack(fill="x")

update_list()
root.bind("<F5>", lambda e: update_list())
root.mainloop()
Y0SHI0N

因此,根据@ acw1668在上面的注释部分中建议的解决方案,我使用将该项目的名称传递给该函数Button(frame, command=lambda name=item: show_item(name)),然后创建函数,def show_item(name)并自动对传递的项目名称做任何我想做的事情。示例代码是:

from tkinter import *
import random

root = Tk()

store_canvas = Frame(root)
store_canvas.pack()

# create the 25 frames
ROWS = COLS = 5
MAX_ITEMS = ROWS * COLS
frames = []
for i in range(MAX_ITEMS):
    frames.append(Frame(store_canvas, width=1520/COLS, height=1030/ROWS, bd=2, relief=SOLID))
    frames[-1].grid(row=i//COLS, column=i%COLS)
    frames[-1].pack_propagate(False)

# function to simulate retrieving data from database table
def retrieve_tiem():
    return [f"Item #{i+1}" for i in range(random.randint(1,MAX_ITEMS))]

# function to show the retrieved items
def update_list():
    Item_list = retrieve_tiem()
    label_font = ("Arial", 20)
    for i, frame in enumerate(frames):
        for w in frame.winfo_children():
            w.destroy()
        if i < len(Item_list):
            item = Item_list[i]
            Button(frame, command=lambda name=item: show_item(name)).pack(fill="both", expand=1)
            Label(frame, text=item, font=label_font, bg="darkgreen", fg="yellow").pack(fill="x")

def show_item(name):
    print(name)


update_list()
root.bind("<F5>", lambda e: update_list())
root.mainloop()

再次感谢您@ acw1668的回答。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检测是否按下了鼠标按钮,然后调用脚本或命令

来自分类Dev

如何查看按下了哪个提交按钮?

来自分类Dev

如何确定按下了哪个按钮?

来自分类Dev

如何知道哪个用户按下了按钮

来自分类Dev

如何确定按下了哪个按钮?

来自分类Dev

如何确定按下了哪个硬件按钮?

来自分类Dev

如何识别按下了哪个按钮

来自分类Dev

如何动态创建按钮名称并检测PHP中按下了哪个按钮?

来自分类Dev

jQuery / PHP-检测按下了哪个按钮

来自分类Dev

无法检测到按下了哪个“提交按钮”

来自分类Dev

检测在自定义 UITableCell 中按下了哪个按钮

来自分类Dev

如何检测是否按下了特定键?

来自分类Dev

识别按下了哪个按钮

来自分类Dev

AS3:如何识别按下了哪个按钮?

来自分类Dev

如何知道在detailCalloutAccessoryView中按下了哪个按钮

来自分类Dev

如何检测QWebView上是否按下了鼠标按钮?

来自分类Dev

Ajax通话-按下了哪个按钮?

来自分类Dev

如何确定在特定时间是否按下了按钮

来自分类Dev

如何检查是否按下了特定的按钮(键盘)-C ++

来自分类Dev

检测是否按下了后退按钮-GLKViewController

来自分类Dev

CKEditor-检测按下了哪些按钮

来自分类Dev

我如何迅速知道不同的按钮通向同一ViewController时按下了哪个按钮?

来自分类Dev

如何检查按下了哪个键?

来自分类Dev

Clojure(打ic):如何知道表单中按下了哪个“提交”按钮?

来自分类Dev

opencart 2.x:如何识别按下了哪个提交按钮?

来自分类Dev

如何显示某些texbox,具体取决于按下了哪个按钮?

来自分类Dev

如何检测是否按下了某个键

来自分类Dev

如何检测Java是否按下了按键?

来自分类Dev

如何检测用户按下了多个选项卡的关闭按钮

Related 相关文章

  1. 1

    检测是否按下了鼠标按钮,然后调用脚本或命令

  2. 2

    如何查看按下了哪个提交按钮?

  3. 3

    如何确定按下了哪个按钮?

  4. 4

    如何知道哪个用户按下了按钮

  5. 5

    如何确定按下了哪个按钮?

  6. 6

    如何确定按下了哪个硬件按钮?

  7. 7

    如何识别按下了哪个按钮

  8. 8

    如何动态创建按钮名称并检测PHP中按下了哪个按钮?

  9. 9

    jQuery / PHP-检测按下了哪个按钮

  10. 10

    无法检测到按下了哪个“提交按钮”

  11. 11

    检测在自定义 UITableCell 中按下了哪个按钮

  12. 12

    如何检测是否按下了特定键?

  13. 13

    识别按下了哪个按钮

  14. 14

    AS3:如何识别按下了哪个按钮?

  15. 15

    如何知道在detailCalloutAccessoryView中按下了哪个按钮

  16. 16

    如何检测QWebView上是否按下了鼠标按钮?

  17. 17

    Ajax通话-按下了哪个按钮?

  18. 18

    如何确定在特定时间是否按下了按钮

  19. 19

    如何检查是否按下了特定的按钮(键盘)-C ++

  20. 20

    检测是否按下了后退按钮-GLKViewController

  21. 21

    CKEditor-检测按下了哪些按钮

  22. 22

    我如何迅速知道不同的按钮通向同一ViewController时按下了哪个按钮?

  23. 23

    如何检查按下了哪个键?

  24. 24

    Clojure(打ic):如何知道表单中按下了哪个“提交”按钮?

  25. 25

    opencart 2.x:如何识别按下了哪个提交按钮?

  26. 26

    如何显示某些texbox,具体取决于按下了哪个按钮?

  27. 27

    如何检测是否按下了某个键

  28. 28

    如何检测Java是否按下了按键?

  29. 29

    如何检测用户按下了多个选项卡的关闭按钮

热门标签

归档