2

我对编程还是很陌生,所以也许我的问题很简单,甚至很愚蠢。正如标题中所说,我正在尝试编写一个 for 循环,它为某个文件夹中的每个图片创建一个图片按钮小部件。这是我到目前为止所拥有的:

import tkinter  
from tkinter import ttk
from tkinter import PhotoImage
import os

root = tkinter.Tk()

list_files = os.listdir(".")

for file in list_files:
    if file.endswith(".gif"):
        drink = PhotoImage(file)
        print(drink)
        b1 = ttk.Button(image=drink, text="Hello", compound="right").pack()
        l1 = ttk.Label(image=drink).pack()


root.mainloop()

现在我得到的是两个小部件,一个标签不显示任何内容,一个按钮显示 Hello。在外壳中,它显示drink1.gif,这是正确的,因为这是我的标准python 文件夹中唯一的gif 文件......

我做错了什么?

4

3 回答 3

3
  1. 用于PhotoImage(file='path_to_file')从路径创建图像。
  2. PhotoImage对象被 Python 垃圾收集时,标签被清除。您必须在drink某处保存对对象的引用::http l1.image = drink:
    //effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm
  3. widget.pack()方法什么都不返回。

import tkinter  
from tkinter import ttk
from tkinter import PhotoImage
import os

root = tkinter.Tk()
list_files = os.listdir(".")
for path in list_files:
    if path.endswith(".gif"):
        drink = PhotoImage(file=path)
        b1 = ttk.Button(root, image=drink, text="Hello", compound="right")
        b1.pack()
        l1 = ttk.Label(root, image=drink)
        l1.image = drink
        l1.pack()

root.mainloop()
于 2013-04-21T15:15:16.123 回答
2

PhotoImage(file)创建一个图像并将其命名为“drink1.gif”,然后返回。如果您确实想将文件加载到图像中,则需要PhotoImage(file = file).

于 2013-04-21T15:00:15.290 回答
0

self.pack根据 Zetcode 教程,我相信你应该运行。

于 2013-04-21T14:55:38.960 回答