2015-06-16 3 views
0

Я пытался добавить начальное меню в игру, которую я делал, и посмотрел повсюду, чтобы посмотреть, как сделать начальное меню. Я попытался использовать учебник от sentdex, но он не работал для моего кода! И я также смотрел во многих других местах. Кто-нибудь знает, как сделать начальное меню - спасибо! Вот мой код! (Извините за плохих отступы и пробелы и прочее, я нашел, что это трудно, чтобы заставить его работать здесь!Как я могу сделать startmenu в python?

from tkinter import * 
import pongtablev2, redball, bat 


black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 

x_velocity = 10 
y_velocity = 0 
score_left = 0 
score_right = 0 
score_top = 0 
score_bottom = 0 
first_serve = True 


window = Tk() 
window.title("MyPong") 


my_pongtablev2 = pongtablev2.Table(window, net_colour="blue",vertical_net=True, horizontal_net=True) 


my_redball = redball.Ball(table=my_pongtablev2, x_speed=x_velocity,y_speed=y_velocity, 
          width=24, height=24, colour="green", x_start=288, y_start=290) 

bat_L = bat.Bat(table=my_pongtablev2, width=15, height=100, x_posn=20, y_posn=250, colour="red") 
bat_R = bat.Bat(table=my_pongtablev2, width=15, height=100, x_posn=575, y_posn=250, colour="red") 
bat_T = bat.Bat(table=my_pongtablev2, width=100, height=15, x_posn=250, y_posn=15, colour="red") 
bat_B = bat.Bat(table=my_pongtablev2, width=100, height=15, x_posn=250, y_posn=570, colour="red") 


def game_flow(): 
    global first_serve 
    global score_left 
    global score_right 
    global score_top 
    global score_bottom 


if(first_serve == True): 
    my_redball.stop_ball() 
    first_serve = False 

bat_L.detect_collision(my_redball) 
bat_R.detect_collision(my_redball) 
bat_T.detect_collision(my_redball) 
bat_B.detect_collision(my_redball) 


if(my_redball.x_posn <= 3): 
    my_redball.stop_ball() 
    my_redball.start_position() 
    bat_L.start_position() 
    bat_R.start_position() 
    bat_T.start_position() 
    bat_B.start_position 
    my_pongtablev2.move_item(bat_L.rectangle, 20, 250, 35, 350) 
    my_pongtablev2.move_item(bat_R.rectangle, 575, 250, 590, 350) 
    my_pongtablev2.move_item(bat_T.rectangle, 250, 15, 350, 30) 
    my_pongtablev2.move_item(bat_B.rectangle, 250, 570, 350, 585) 
    score_left = score_left + 1 
    if(score_left >= 10): 
     score_left = "WINNER!!!" 
     score_right = "Looser" 
     score_top = "Looser" 
     score_bottom = "Looser" 
    first_serve = True 
    my_pongtablev2.draw_score(score_left, score_right) 
    my_pongtablev2.draw_score2(score_top) 
    my_pongtablev2.draw_score3(score_bottom) 

if(my_redball.x_posn + my_redball.width >= my_pongtablev2.width - 3): 
    my_redball.stop_ball() 
    my_redball.start_position() 
    bat_L.start_position() 
    bat_R.start_position() 
    bat_T.start_position() 
    bat_B.start_position() 
    my_pongtablev2.move_item(bat_L.rectangle, 20, 250, 35, 350) 
    my_pongtablev2.move_item(bat_R.rectangle, 575, 250, 590, 350) 
    my_pongtablev2.move_item(bat_T.rectangle, 250, 15, 350, 30) 
    my_pongtablev2.move_item(bat_B.rectangle, 250, 570, 350, 585) 
    score_right = score_right + 1 
    if(score_right >= 10): 
     score_right = "WINNER!!!" 
     score_left = "Looser" 
     score_top = "Looser" 
     score_bottom = "Looser" 
    first_serve = True 
    my_pongtablev2.draw_score(score_left, score_right) 
    my_pongtablev2.draw_score2(score_top) 
    my_pongtablev2.draw_score3(score_bottom) 


if(my_redball.y_posn <= 3): 
    my_redball.stop_ball() 
    my_redball.start_position() 
    bat_L.start_position() 
    bat_R.start_position() 
    bat_T.start_position() 
    bat_B.start_position() 
    my_pongtablev2.move_item(bat_L.rectangle, 20, 250, 35, 350) 
    my_pongtablev2.move_item(bat_R.rectangle, 575, 250, 590, 350) 
    my_pongtablev2.move_item(bat_T.rectangle, 250, 15, 350, 30) 
    my_pongtablev2.move_item(bat_B.rectangle, 250, 570, 350, 585) 
    score_top = score_top + 1 
    if(score_top >= 10): 
     score_top = "WINNER!!!" 
     score_left = "Looser" 
     score_right = "Looser" 
     score_bottom = "Looser" 
    first_serve = True 
    my_pongtablev2.draw_score3(score_bottom) 
    my_pongtablev2.draw_score(score_left, score_right) 
    my_pongtablev2.draw_score2(score_top) 


if(my_redball.y_posn + my_redball.height >= my_pongtablev2.height - 3): 
    my_redball.stop_ball() 
    my_redball.start_position() 
    bat_L.start_position() 
    bat_R.start_position() 
    bat_T.start_position() 
    bat_B.start_position() 
    my_pongtablev2.move_item(bat_L.rectangle, 20, 250, 35, 350) 
    my_pongtablev2.move_item(bat_R.rectangle, 575, 250, 590, 350) 
    my_pongtablev2.move_item(bat_T.rectangle, 250, 15, 350, 30) 
    my_pongtablev2.move_item(bat_B.rectangle, 250, 570, 350, 585) 
    score_bottom = score_bottom + 1 
    if(score_bottom >= 10): 
     score_bottom = "WINNER!!!" 
     score_right = "Looser" 
     score_left = "Looser" 
     score_top = "Looser" 
    first_serve = True 
    my_pongtablev2.draw_score2(score_top) 
    my_pongtablev2.draw_score3(score_bottom) 
    my_pongtablev2.draw_score(score_left, score_left) 

my_redball.move_next() 
window.after(17, game_flow) 


def restart_game(master): 
global score_left 
global score_right 
global score_top 
global score_bottom 
my_redball.start_ball(x_speed=x_velocity, y_speed=11) 
if(score_left == "WINNER!!!" or score_right == "Looser" or score_top == "Looser" or score_bottom == "Looser"): 
    score_left = 0 
    score_right = 0 
    score_top = 0 
    score_bottom = 0 
my_pongtablev2.draw_score(score_left, score_right,) 
my_pongtablev2.draw_score2(score_top) 
my_pongtablev2.draw_score3(score_bottom) 


window.bind("q", bat_L.move_up) 
window.bind("a", bat_L.move_down) 
window.bind("<Up>", bat_R.move_up) 
window.bind("<Down>", bat_R.move_down) 
window.bind("u", bat_T.move_left) 
window.bind("i", bat_T.move_right) 
window.bind("n", bat_B.move_left) 
window.bind("m", bat_B.move_right) 


window.bind("<space>", restart_game) 


game_flow() 


window.mainloop() 
+0

Пожалуйста редактировать ваш код до [MCVE] (http://stackoverflow.com/help/mcve). – TigerhawkT3

+0

Извините, я новичок в python, и мне действительно не нужно было показывать код, это была просто ссылка, если вам это нужно! ☺ – RedNax

+0

Как бы то ни было, этот вопрос просто сбрасывает программу и просит SO реализовать функцию для Это. Сначала попробуйте создать его. Затем, если вы столкнулись с определенной проблемой, опубликуйте только код, который позволяет нам видеть, реплицировать и устранять эту проблему. – TigerhawkT3

ответ

1

Я предполагаю, что с помощью меню «Пуск» вы имеете в виду, что обычно называется «меню верхнего уровня» , «меню приложения» или «панель меню приложения». Например, в MS-Windows это будет меню, которое отображается в верхней части окна приложения.

Вот ссылка на некоторую полезную помощь меню: The Tkinter Menu Widget. Этот сайт содержит много другой полезной информации о Tkinter, доступной из ссылок на этой странице. Также Tkinter 8.5 reference: a GUI for Python - отличный ресурс.

Но для решения вашего конкретного вопроса, и используя свой код, только после этих двух линий:

window = Tk() 
window.title("MyPong") 

Во-первых, добавьте эти две строки:

menu_bar = Menu(window) 
window.config(menu=menu_bar) 

Это создает меню приложения (ака полоске меню). Обратите внимание, что функция config()menu=parameter) вызывается на объекте Tk. Это то, что делает его окном приложения. (Вы можете связать меню с другими окнами и виджетами тоже, и создавать контекстное меню и т.д. все, используя тот же класс Tk.Menu.)

Затем добавить любое меню вы хотите иметь на этом полоске меню с помощью Menu.add_cascade(). Например, меню «Файл» является довольно распространенным явлением:

file_menu = Menu(menu_bar) 
menu_bar.add_cascade(label="File", menu=file_menu) 

И, наконец, можно добавить команды меню с помощью Menu.add_command() и разъездных вызываемый объект с помощью команды = параметр:

file_menu.add_command(label="New", command=create_a_new_game) 
file_menu.add_command(label="Open", command=open_a_saved_game) 
file_menu.add_command(label="Save", command=save_the_game) 
file_menu.add_separator() 
file_menu.add_command(label="Exit", command=callback) 

Просто используйте Menu.add_cascade() для добавления других меню. Например, другое популярное меню «Помощь»:

help_menu = Menu(menu_bar) 
help_menu.add_cascade(label="Help", menu=help_menu) 
help_menu.add_command(label="About", command=show_help) 

Если вы хотите подменю, вы можете использовать просто использовать Menu.add_cascade() в меню добавляется в меню-бар:

file_submenu = Menu(file_menu) 
file_menu.add_cascade(label="Submenu", menu=file_submenu) 
file_submenu.add_command(label="Something", command=something) 
file_submenu.add_command(label="Something Else", command=another) 
+0

Спасибо, это отличное объяснение и поможет мне! – RedNax

Смежные вопросы