0
from tkinter import *
from random import *
from functools import partial


class Game:
    def __init__(self):
        self.root = Tk()

        self.frame = Frame(width = 574, height = 574)
        self.frame.grid(columnspan = 30, rowspan = 30)

        self.minex = []
        self.miney = []

        self.clickx = 0
        self.clicky = 0

        blank = PhotoImage(file = 'C:\\Users\\PC\\Desktop\\Python Programs\\Minesweeper\\blank.gif')

        for i in range(0,30):
            for j in range(0,30):
                button = Button(width = 15, height = 15, padx = 2, pady = 2, image = blank, command = partial(self.click, j, i))
                button.grid(row = i, column = j)

        self.mine_place()

        self.root.mainloop()

    def mine_place(self):
        for i in range(0,15):
            self.minex.append(randint(1,30))
            self.miney.append(randint(1,30))

    def click(self, j, i):
        miss = PhotoImage(file = 'C:\\Users\\PC\\Desktop\\Python Programs\\Minesweeper\\miss.gif')
        hit = PhotoImage(file = 'C:\\Users\\PC\\Desktop\\Python Programs\\Minesweeper\\hit.gif')
        for k in range(0, len(self.minex)):
            if j + 1 == self.minex[k] and i + 1 == self.miney[k]:
                button = Button(image = hit)
                button.grid(row = i, column = j)
            else:
                button = Button(image = miss)
                button.grid(row = i, column = j)


app = Game()

在 self.click 中,当我希望使用此图像创建一个按钮时,我会得到一个空白图像。如果我在init中创建一个按钮,图像就会很好。怎么了?.............................................. ......

4

1 回答 1

1

看起来您的图像正在被垃圾收集,您需要在使用后保存对图像的引用PhotoImage

即 - 您创建图像blank,因此将参考保存为 self.blank=blank 并使用image = self.hit

于 2015-08-26T06:25:51.757 回答