微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使按钮不在列表中

如何解决如何使按钮不在列表中

我正在尝试编写代码,以使按钮脱离图像。每当您单击该按钮时,它将显示该图像。

import os
from PIL import ImageTk,Image
import tkinter
root = tkinter.Tk()
folder_list = os.listdir(r"C:\Users\Teknoloji\Desktop\Phyton\Jack\Selam")

def Imagen():

    image = tkinter.Canvas(root,width=300,height=300)
    for b in folder_list:
        if b == my_text:
            img = ImageTk.PhotoImage(Image.open(f"Images\{b}"))
    label = tkinter.Label(image=img)
    print(my_text)
    label.image = img
    image.create_image(120,120,image=img)
    image.pack()

for i in folder_list:
    button = tkinter.Button(root,text=i,command=Imagen)
    my_text = button.cget("text")
    print(my_text)
    button.pack()
root.mainloop()

解决方法

我已经接受了您的代码,并在此处进行了一些更改:

lapply(
  X = 1:5,FUN = function(i) {
    lst <- lapply(
      X = 1:10,FUN = function(j) {
        cbind(round(rnorm(1),4),paste(i,j,sep = "."),LETTERS[i+j])
      }
    )
    Reduce(rbind,lst)
  }
)

我做了什么?

  • 我已经从代码中删除了一些不需要的部分,例如在函数内部进行了不必要的循环,而且似乎您没有使用标签来显示图像,而是使用了import os from PIL import ImageTk,Image import tkinter root = tkinter.Tk() folder_list = os.listdir(r"C:\Users\Teknoloji\Desktop\Phyton\Jack\Selam") def Imagen(img_path): img = ImageTk.PhotoImage(Image.open(f'images/{img_path}')) #label = tkinter.Label(image=img) image.whatever = img #keeping a reference,can be anything image.itemconfigure('image',image=img) image.pack() for i in folder_list: button = tkinter.Button(root,text=i,command=lambda i=i:Imagen(i),width=10) button.pack(pady=5) image = tkinter.Canvas(root,width=300,height=300) image.create_image(120,120,tag='image') root.mainloop() ,无论哪种方式都可以确保按下按钮时,它不会覆盖现有图像。

  • 我还已将图像路径作为参数传递给打开图像的函数,以便canvas可以具有传递给函数的参数。

循环按钮如何工作? (摘自here

这看起来很神奇,但这是发生了什么。当您使用该lambda定义函数时,open_this调用在定义函数时不会获取变量i的值。取而代之的是,它做一个闭包,有点像是对自己的注释,上面写着“我应该在被调用时查找变量i的值”。当然,该函数是在循环结束后调用的,所以那时我将始终等于循环中的最后一个值。 使用i = i技巧会使您的函数在定义lambda时存储i的当前值,而不是等待稍后查找i的值。 让我知道这是否有效。

如果对此有任何疑问或错误,请告诉我。

欢呼

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。