启动tkinter GUI

时间:2015-03-23 03:44:52

标签: python user-interface tkinter

我想开始使用tkinter GUI制作程序。

我在大学时学到了一点tkinter,但从那时起已经很长时间了,说实话,我没有保留任何关于它的知识。重新阅读tkinter上的文档之后,我确信这是没有希望的,因为我不确定我必须使用哪些tkinter类型才能使我的程序按照我的要求行事(主要是因为我正在尝试处理图像)

我的程序的最终(简化)目标是将游戏板作为背景图像(background.gif或其他)放置,并在这些图像之上,在用户点击该屏幕区域时放置另一个图像。 / p>

我尝试使用create_image,但出于某种原因,我无法让它工作。即使我确实让它发挥作用,我也不确定如何在tkinter上的另一个图像上绘制图像?

我想我的主要问题是:我如何制作它以便创建背景图像,还可以将小部件/其他图像放在图像画布的顶部?或者我应该使用标签/框架吗?

不起作用的实验代码(有谁知道为什么?)

import tkinter as tk
from PIL import Image, ImageTk
import os

class GUI:
    def __init__(self):
        self.root = tk.Tk()
        self.root.resizable(width=tk.FALSE, height=tk.FALSE)
        self.start_GUI();
        self.root.mainloop();

    def start_GUI(self):
        self.canvas = tk.Canvas(master = self.root, width = 734, height = 429)
        self.canvas.pack(expand = tk.YES, fill = tk.BOTH)
        gif1 = tk.PhotoImage(file = 'background.gif')
        self.canvas.create_image(0, 0, image = gif1)

if __name__ == '__main__':
    rootstart = GUI();

1 个答案:

答案 0 :(得分:0)

显示图像时出现问题的原因(我认为它们不可见)是gif1是一个局部变量。一旦start_GUI完成执行,gif1超出范围,图像将被删除。所以你没有看到任何图像,因为无论如何都没有图像可见。您需要通过执行程序来保持对图像对象生命的引用。在您的示例中,简单的方法是使它们成为实例变量,例如

self.gif1 = tk.PhotoImage(file = 'background.gif')
self.canvas.create_image(0, 0, image = self.gif1)

要在顶部绘制新图像,您只需执行相同的操作,例如

self.gif2 = tk.PhotoImage(file = 'some_foreground_image.gif')
self.canvas.create_image(0, 0, image = self.gif2)