读取按下的按钮

我正在试着写一个蟒蛇脚本来帮助一些聋人。他们有一个M4V格式的手语歌曲列表。
我有一个覆盆子圆周率和一个显示器,我可以给他们。
我的目的是提供一个在按钮上有所有歌曲编号的图形用户界面,这样他们只需点击一个按钮,视频就会播放,然后返回。
我知道我可以使用该文件作为参数来启动omxplay。
我正试图在我的Linux笔记本电脑上开发代码,然后将其与所有歌曲一起传输到覆盆子pi>有152首
这就是我的问题所在。
我有以下代码(只是相关的代码片段):

选择 | 换行 | 行号
  1. def play_song(p):
  2.     i=p; k=int(i)
  3.     if k>0:
  4.         if k<136:
  5.             starter="home/norman//Downloads/bsl/sn_"
  6.         else:
  7.             starter="snnw_"
  8.         if k<156:
  9.             stp=str(k)
  10.             if len(stp)<2:
  11.                 stp="0"+stp
  12.                 if len(stp)<3:
  13.                     stp=" " + stp
  14.     song2play=starter+ stp +"_r480P.m4v"
  15.     print song2play
  16.  
  17. # generate the buttons
  18. for x in range(1,9):
  19.     for y in range(1,20):
  20.         txt=str(q)
  21.         j=int(txt)
  22.         myname="button" + str(x*y)
  23.         myname = Button(frame2,text=txt, font=TF, width=3, command = lambda: play_song(txt))
  24.         myname.grid(row = x+2, column=y+1)
  25.         q+=1
  26.  

我尝试了各种方法将正确的歌曲编号传递给该函数,但无论我尝试什么,我都会遇到相同的问题,或者在我尝试的其他版本中出现许多错误。
我得到生成的相同文件名:
SNNW_152_r480P.m4v
无论我点击哪一个按钮。可以这样做吗?或者我必须用其他方式来创建按钮

# 回答1


这是玉兰油,谢谢你把它弄好了。今晚我一定是傻乎乎的。只是稍微修改了一下代码:

选择 | 换行 | 行号
  1. def play_song(event):
  2.     p = event.widget['text']
  3.     k=int(p)
  4.  

选择 | 换行 | 行号
  1.         myname = Button(frame2,text=txt, font=TF, width=3)
  2.         myname.bind('<Button-1>', play_song)
  3.  

因此,现在它确实奏效了。

# 回答2


当k>155时会发生什么?您还可以使用Partial将数字传递给函数

选择 | 换行 | 行号
  1. from functools import partial
  2.  
  3.         myname = Button(frame2,text=txt, font=TF, width=3, command = partial(play_song, txt))  

请注意,绑定向函数发送事件,而"命令"不发送。

# 回答3


谢谢德布拉斯,我不知道偏心的事。
我认为在这种情况下,k不可能高于155,除非我遗漏了什么?

标签: python

添加新评论