Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在画布上的GUI游戏中创建不同的屏幕?_Python_User Interface_Canvas_Tkinter_Tkinter Canvas - Fatal编程技术网

Python 在画布上的GUI游戏中创建不同的屏幕?

Python 在画布上的GUI游戏中创建不同的屏幕?,python,user-interface,canvas,tkinter,tkinter-canvas,Python,User Interface,Canvas,Tkinter,Tkinter Canvas,这就是我到目前为止所做的,我正在做一个游戏,你有一个角色(现在它只是一个圆圈),你必须在不触碰墙壁的情况下通过游戏。它将逐渐变得更难,因为你可以看到第一个层次,你甚至不必做太多。我不知道如何创建一个“带有游戏标题和开始按钮以及说明按钮的开始屏幕,同时仍然是600x600画布。我环顾四周,在大多数情况下都会用到框架和类,但我也读到了一些你不应该使用的地方?如果有人能给我一个想法,甚至只是做一个屏幕,我相信我可以把其余的拼在一起,这将是非常感谢 from Tkinter import * '''

这就是我到目前为止所做的,我正在做一个游戏,你有一个角色(现在它只是一个圆圈),你必须在不触碰墙壁的情况下通过游戏。它将逐渐变得更难,因为你可以看到第一个层次,你甚至不必做太多。我不知道如何创建一个“带有游戏标题和开始按钮以及说明按钮的开始屏幕,同时仍然是600x600画布。我环顾四周,在大多数情况下都会用到框架和类,但我也读到了一些你不应该使用的地方?如果有人能给我一个想法,甚至只是做一个屏幕,我相信我可以把其余的拼在一起,这将是非常感谢

from Tkinter import *


'''global for all three levels'''

root=Tk()
root.wm_title("Game title")
canvas = Canvas(root, width=600, height=600, bg = 'white')
canvas.grid()

circle = canvas.create_oval(280, 280, 300, 300, fill = 'purple')
dx, dy = 0, 0

def move(e):
    global dx, dy
    if e.keysym == 'Left':
        dx, dy = -5, 0
    elif e.keysym == 'Right':
        dx, dy = 5, 0
    elif e.keysym == 'Up':
        dx, dy = 0, -5
    elif e.keysym == 'Down':
        dx, dy = 0, 5
    elif e.keysym == 's':
        dx, dy = 0,0

def animate():
    x1, y1, x2, y2 = canvas.coords(circle)
    canvas.coords(circle, x1 + dx, y1 + dy, x2 + dx, y2 + dy)
    canvas.after(100, animate)       

root.bind('<Left>', move)
root.bind('<Right>', move)
root.bind('<Up>', move)
root.bind('<Down>', move)
animate()


#class main_Screen()        

#start button, instructions button, want it to be 600x600 same as level screens              



#class levels()

    #def level_One()

        #wall1 = canvas.create_rectangle(0, 0, 650, 200, fill='#00ff00')
        #wall2 = canvas.create_rectangle(0, 400, 650, 600, fill='#00ff00')


    #def level_Two():

        #canvas.create_rectangle(500, 0, 600, 600, fill = '#000000')
        #canvas.create_rectangle(490, 600, 500, 0, fill = '#000000')
        #canvas.create_rectangle(400, 90, 490, 360, fill = '#000000')
        #canvas.create_rectangle(440, 40, 0, 0, fill = '#000000')
        #canvas.create_rectangle(260, 40, 350, 210, fill = '#000000')
        #canvas.create_rectangle(60, 90, 210, 240, fill = '#000000')
        #canvas.create_rectangle(0, 0, 10, 310, fill = '#000000')
        #canvas.create_rectangle(0, 290, 120, 600, fill = '#000000')
        #canvas.create_rectangle(400, 600, 440, 410, fill = '#000000')
        #canvas.create_rectangle(440, 410, 270, 500, fill = '#000000')
        #canvas.create_rectangle(490, 360, 220, 260, fill = '#000000')
        #canvas.create_rectangle(220, 260, 170, 560, fill = '#000000')
        #canvas.create_rectangle(170, 560, 210, 240, fill = '#000000')
        #canvas.create_rectangle(350, 560, 220, 550, fill = '#000000')



    #def level_Three()


root.mainloop()
从Tkinter导入*
“所有三个级别的全球”
root=Tk()
root.wm_标题(“游戏标题”)
画布=画布(根,宽度=600,高度=600,背景='白色')
canvas.grid()
圆圈=画布。创建椭圆(280280300300,填充=紫色)
dx,dy=0,0
def移动(e):
全局dx,dy
如果e.keysym==“左侧”:
dx,dy=-5,0
elif e.keysym=='Right':
dx,dy=5,0
elif e.keysym==“向上”:
dx,dy=0,-5
elif e.keysym==“向下”:
dx,dy=0,5
elif e.keysym=='s':
dx,dy=0,0
def animate():
x1,y1,x2,y2=画布坐标(圆)
画布坐标(圆,x1+dx,y1+dy,x2+dx,y2+dy)
canvas.after(100,动画)
root.bind(“”,移动)
root.bind(“”,移动)
root.bind(“”,移动)
root.bind(“”,移动)
制作动画()
#类主屏幕()
#开始按钮,说明按钮,希望它是600x600相同的水平屏幕
#班级级别()
#def一级()
#wall1=画布。创建一个矩形(0,0,650,200,fill='#00ff00')
#wall2=画布。创建_矩形(0、400、650、600,填充='#00ff00')
#def液位二()
#canvas.create_矩形(500,060600,fill='#000000')
#canvas.create_矩形(490600500,0,fill='#000000')
#画布。创建矩形(400、90、490、360,填充='#000000')
#canvas.create_u矩形(440、40、0、0、fill='\000000')
#canvas.create_矩形(260,40,350,210,fill='#000000')
#canvas.create_矩形(60,90210240,fill='#000000')
#canvas.create_矩形(0,0,10310,fill='#000000')
#canvas.create_矩形(0290120600,fill='#000000')
#canvas.create_矩形(400600440410,fill='#000000')
#canvas.create_矩形(440410270500,fill='#000000')
#canvas.create_矩形(490360220260,fill='#000000')
#canvas.create_矩形(220260170560,fill='#000000')
#canvas.create_矩形(170560210240,fill='#000000')
#canvas.create_矩形(350560220550,fill='#000000')
#def三级()
root.mainloop()

您应该能够使用以下代码作为在游戏中使用不同“屏幕”的基础。基本上,您可以将所有要使用的帧堆叠在一起,然后在要显示的帧上使用命令
frame.tkraise()

import Tkinter as tk  # Import the Tkinter library
root = tk.Tk()

top_level_container = tk.Frame(root)  # Set up the null top level container
top_level_container.pack()

# These are where you delcare all of the frames you wish to switch between
main_frame = tk.Frame(top_level_container)
game_frame = tk.Frame(top_level_container)

# Stack all of these frame on top of each other
for frame in (main_frame, game_frame):
    frame.grid(row=0, column=0, sticky='news', padx=0, pady=0)


def switch_main():  # Bring the main frame to the front
    main_frame.tkraise()


def switch_game():  # Bring the game frame to the front
    game_frame.tkraise()

switch_main()  # Start with the main frame in front

# Create the contents of the main frame
main_text = tk.Label(main_frame, text="This is the main screen")
main_text.pack()
main_button = tk.Button(main_frame, text="Switch screens",
                        command=switch_game, background="blue")
main_button.pack()

# Create the contents of the game frame
game_text = tk.Label(game_frame, text="This is the game screen")
game_text.pack()
game_button = tk.Button(game_frame, text="Switch screens",
                        command=switch_main, background="green")
game_button.pack()

root.mainloop()  # Execute the main event handler

我也不是很热衷于类如何在编码中工作,或者你如何知道该放什么。对不起,我是一个新手,但任何评论都有帮助!是否希望“开始”屏幕是一个单独的窗口?创建
Toplevel
的实例。否则,请创建一个
框架
并在框架中放入您想要的任何内容。我不想要一个单独的窗口,我希望它只使用同一个窗口,但可以打开不同的屏幕,我尝试输入顶层,但似乎无法使其工作。我会再试一次,谢谢。谢谢!抱歉,这太晚了,但我决定将所有内容保留在一个屏幕上,每次只清除画布。不用担心,只是一个警告,如果您需要以任何高频率更新内容,您可能会发现每次清除和重新绘制都会减慢您的速度。如果只是偶尔使用,那么这种方法应该可以。是的,因为我只有三个级别,所以我认为它不会对它产生太大影响:)