python如何清理窗口_Python如何在tkin中清除窗口

import tkinter

from tkinter import *

class Window(Frame):

def __init__(self, master=None):

Frame.__init__(self, master)

self.master = master

self.init_window()

def init_window(self):

self.master.title('Sokoban')

self.pack(fill = BOTH, expand = 1)

menu = Menu(self.master)

self.master.config(menu=menu)

file = Menu(menu)

file.add_command(label='Mapa1', command = self.map1)

menu.add_cascade(label='Mapy', menu=file)

edit = Menu(menu)

edit.add_command(label='Mapa2', command = self.map2)

menu.add_cascade(label='Edit', menu=edit)

def map1(self):

self.frame.forget()

Sokoban('map1.txt')

def map2(self):

self.frame.forget()

Sokoban('map2.txt')

class Sokoban:

def __init__(self, subor):

t = open(subor, 'r')

self.pole = [None] * 8

self.box = []

for a in range(8):

self.pole[a] = list(t.readline().strip())

for b in range(len(self.pole[a])):

if self.pole[a][b] == '$':

self.player = Player(a,b)

self.pole[a][b] = '.'

if self.pole[a][b] == '@':

self.box.append(Box(a,b))

self.pole[a][b] = '.'

t.close()

self.game = self.g = tkinter.Canvas(bg = 'white', width = 650, height = 240,

cursor = 'cross')

self.g.pack()

self.farba = [['gray'],['khaki'],['#FF4500'],['yellow'],['brown']]

stena = '*'

policko = '.'

player = '$'

box = '@'

ciel = '+'

## self.newButt = self.g.create_rectangle(511, 0, 650, 45, fill = 'red')

## self.newButtText = self.g.create_text(580.5, 22.5, text = 'New Game',

## font = 'arial 19 italic bold',

## fill = 'yellow')

## self.map1Butt = self.g.create_rectangle(511, 46, 650, 86, fill = 'red')

## self.map1ButtText = self.g.create_text(580.5, 66, text = 'Map - 1',

## font = 'arial 19 italic bold',

## fill = 'yellow')

## self.map2Butt = self.g.create_rectangle(511, 87, 650, 127, fill = 'red')

## self.map2ButtText = self.g.create_text(580.5, 109, text = 'Map - 2',

## font = 'arial 19 italic bold',

## fill = 'yellow')

## self.map3Butt = self.g.create_rectangle(511, 128, 650, 168, fill = 'red')

## self.map3ButtText = self.g.create_text(580.5, 148, text = 'Map - 3',

## font = 'arial 19 italic bold',

## fill = 'yellow')

self.kresli()

self.g.bind_all('', self.up)

self.g.bind_all('', self.down)

self.g.bind_all('', self.left)

self.g.bind_all('', self.right)

## self.g.bind('<1>', self.Buttons)

def up(self, e):

self.move(-1, 0)

def down(self, e):

self.move(1, 0)

def left(self, e):

self.move(0, -1)

def right(self, e):

self.move(0, 1)

## def newGame(self):

## self.game.pack_forget()

## Sokoban()

## def map1(self):

## self.game.pack_forget()

## Sokoban('map1.txt')

##

## def map2(self):

## self.game.pack_forget()

## Sokoban('map2.txt')

## def Buttons(self, e):

## if '<1>' and self.newButt:

## self.newGame()

## if '<1>' and self.map1Butt:

## self.map1()

##

## if '<1>' and self.map2Butt:

## self.map2()

def kresli(self):

for a in range(8):

for b in range(17):

x,y = b*30, a*30

f = self.farba['*.+'.index(self.pole[a][b])]

self.g.create_rectangle(x,y,x+30,y+30,fill=f)

self.player.kresli(self.g, self.farba[3])

for box in self.box:

box.kresli(self.g, self.farba[4])

def setBox(self, r, s):

for a in range(len(self.box)):

if self.box[a].r==r and self.box[a].s==s:

return a

return -1

def move(self, dr, ds):

r = self.player.r + dr

s = self.player.s + ds

if r<0 or r>=8 or s<0 or s>=510 or self.pole[r][s] == '*':

return

c = self.setBox(r, s)

if c >= 0:

rr = r + dr

ss = s + ds

if rr < 0 or rr>=8 or ss<0 or ss>=510 or self.pole[rr][ss] == '*':

return

if self.setBox(rr, ss) >= 0:

return

self.box[c].move(dr, ds)

self.player.move(dr, ds)

for c in self.box:

if self.pole[c.r][c.s] != '+':

return

class Player:

def __init__(self, r, s):

self.r = r

self.s = s

def kresli(self, g, farba):

self.g = g

x,y = self.s*30, self.r*30

self.plr = tkinter.PhotoImage(file='player.png')

self.id1 = g.create_image(x+15, y+15, image = self.plr)

def move(self, dr, ds):

self.r = self.r + dr

self.s = self.s + ds

self.g.move(self.id1, ds*30, dr*30)

class Box:

def __init__(self, r, s):

self.r = r

self.s = s

def kresli(self, g, farba):

self.g = g

x,y = self.s*30, self.r*30

self.bx = tkinter.PhotoImage(file='box.png')

self.id2 = g.create_image(x+15, y+15, image = self.bx)

def move(self, dr, ds):

self.r = self.r + dr

self.s = self.s + ds

self.g.move(self.id2, ds*30, dr*30)

root = Tk()

root.geometry('510x240')

app = Window(root)

root.mainloop()

Sokoban()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值