小编Doc*_*lar的帖子

Tkinter和PIL调整图像大小以适合标签

我正在尝试使用PIL在Tkinter中显示图片.正如前一个问题中所建议的那样,我使用了一个标签:

from Tkinter import *

class App(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid(row=0)
        self.columnconfigure(0,weight=1)
        self.rowconfigure(0,weight=1)
        image = Image.load('example.png')
        image = ImageTk.PhotoImage(image.convert('RGBA'))
        self.display = Label(self,image=image)
        self.display.grid(row=0)

root = Tk()
app = App(root)
app.mainloop()
root.destroy()
Run Code Online (Sandbox Code Playgroud)

有没有办法调整图像大小以适应标签?例如,如果exam​​ple.png为2000x1000但窗口仅为800x600,则仅显示图像的一部分.

python tkinter python-imaging-library

11
推荐指数
1
解决办法
3万
查看次数

使用PIL在Tkinter中显示动画GIF

我正在尝试制作一个使用Tkinter显示动画GIF的程序.这是我最初使用的代码:

from __future__ import division # Just because division doesn't work right in 2.7.4
from Tkinter import *
from PIL import Image,ImageTk
import threading
from time import sleep

def anim_gif(name):
    ## Returns { 'frames', 'delay', 'loc', 'len' }
    im = Image.open(name)
    gif = { 'frames': [],
            'delay': 100,
            'loc' : 0,
            'len' : 0 }
    pics = []
    try:
        while True:
            pics.append(im.copy())
            im.seek(len(pics))
    except EOFError: pass

    temp = pics[0].convert('RGBA')
    gif['frames'] = [ImageTk.PhotoImage(temp)]
    temp = pics[0]
    for item in pics[1:]:
        temp.paste(item) …
Run Code Online (Sandbox Code Playgroud)

python tkinter animated-gif python-imaging-library

3
推荐指数
2
解决办法
9587
查看次数

lambda与tkinter奇怪地合作

我正在尝试使用Tkinter制作计算器.我一直试图清理代码,但遇到了麻烦.创建按钮时,我使用以下代码:

Button(self,text="1",command=lambda: self.addkey("1"),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=0)
Button(self,text="2",command=lambda: self.addkey("2"),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=1)
Button(self,text="3",command=lambda: self.addkey("3"),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=2)
Run Code Online (Sandbox Code Playgroud)

以下是命令调用

def addkey(self,key):
            # Adds a given key to the display
            if len(self.displaytext) + len(key) <= self.maxlength:
                self.displaytext += key
                self.display["text"] = self.displaytext
Run Code Online (Sandbox Code Playgroud)

按顺序按下按钮1,2和3时,输出如下:

123
Run Code Online (Sandbox Code Playgroud)

我一直在尝试清理代码,使它看起来更像:

for i in range(3):
    Button(self,text=str(i+1),command=lambda: self.addkey(str(i+1)),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=i)
Run Code Online (Sandbox Code Playgroud)

这样可以很好地添加按钮,但是当按顺序按下1,2和3时,屏幕上会显示以下内容:

333
Run Code Online (Sandbox Code Playgroud)

我想知道我是否错过了什么,或者这根本不可能.

python lambda tkinter

2
推荐指数
1
解决办法
138
查看次数