【问题标题】:Starting a tkinter GUI启动 tkinter GUI
【发布时间】:2015-03-23 03:44:52
【问题描述】:

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

我在大学里学了一点 tkinter,但从那以后已经很久了,老实说,我没有保留任何关于它的知识。在重新阅读关于 tkinter 的文档后,我确信这是没有希望的,因为我不确定我必须使用哪些 tkinter 类型才能让我的程序按照我想要的方式运行(主要是因为我正在尝试处理图片)

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

我尝试了 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();

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    您在显示图像时遇到问题(我假设它们不可见)的原因是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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多