python - 有人可以帮我处理 tkinter“命令”中的参数吗
问题描述
我正在尝试仅使用按钮制作一个小文件浏览器,我仍处于早期阶段,并且想要制作一个功能打印按下哪个按钮并想出了这个:
import tkinter as tk
buttons = []
window = tk.Tk()
window.geometry("200x100")
def open(button):
print(button)
def list(titles):
i=0
while i<(len(titles)):
btn = tk.Button(text=titles[i], width=20, command=lambda: open(i))
buttons.append(btn)
buttons[i].grid(row=i, column=1)
print(f"adding {titles[i]}")
i=i+1
list(["title1", "title2", "title3"])
window.mainloop()
有一个问题:它总是打印3
. 我想我知道问题出在哪里,i
生成按钮后总是保持 3 所以它将 3 传递给函数,但我不知道如何解决它。我使用了 lambda 因为我不能只使用传递参数,并在这个问题open(i)
上找到了 lambda 解决方案。
有人可以帮忙吗?天呐!
解决方案
因为当您再次分配它时,它会将命令覆盖在一个按钮上。做:
import tkinter as tk
buttons = []
window = tk.Tk()
window.geometry("200x100")
def open(button):
print(button)
def list(titles):
btn = tk.Button(text=titles[0], width=20, command=lambda: open(1))
buttons.append(btn)
buttons[0].grid(row=1, column=1)
print(f"adding {titles[0]}")
btn = tk.Button(text=titles[1], width=20, command=lambda: open(2))
buttons.append(btn)
buttons[1].grid(row=2, column=1)
print(f"adding {titles[1]}")
btn = tk.Button(text=titles[2], width=20, command=lambda: open(2))
buttons.append(btn)
buttons[2].grid(row=3, column=1)
print(f"adding {titles[2]}")
list(["title1", "title2", "title3"])
window.mainloop()
推荐阅读
- php - Xampp内部文件如PhpMyAdmin\index.php、htdocs\index.php、config.php、response.php、whitelist.php在调试模式下进行
- r - 结合 plot3D , plotly 和 ggplot 可视化
- javascript - 社交媒体应用中用户交互的 Firestore 结构
- python-3.x - 在线程中使用 psycopg2 游标的正确方法是什么?
- javascript - 加入不从 JavaScript 数组中删除逗号
- oracle - 如何将列的值提取到 CLOB 变量中?
- javascript - 如何在使用此关键字的方法中设置类变量的状态
- javascript - 如何优雅地防止某些元素在现代浏览器上呈现
- visual-studio-code - VS CODE - 代码运行器 - 输出不工作
- c# - 单元测试控制器抛出异常