2013-12-06 3 views
0

Я просто пытался практиковать какой-то код, сделав простую игру в костяхСоздание основной пользовательский интерфейс с Tkinter-питоном

и использование Tkinter для пользовательского интерфейса исходного меню для игры

Для начального меню, я пытаюсь просто посмотреть, как это получится, если я воспользуюсь кодом ниже,

НО перед тем, как сделать виджет кнопки и ярлыки-ярлыки, сначала появятся команды.

Как бы исправить это?

заранее спасибо


import tkinter as tk 
from main import main 
from written import showInstructions, showCredits 
from generate_no import generate_no 

class DiceGameUI(tk.Frame): 
    def __init__(self, master = None): 
     tk.Frame.__init__(self, master) 
     self.grid() 
     self.createWidgets() 

    def createWidgets(self): 
     self.titleLabel = tk.Label(self, fg = "red") #The Title of the Game 
     self.titleLabel["text"] = "Dice Game" 

     self.startButton = tk.Button(self)    #Start Button 
     self.startButton["text"] = "Roll On!" 
     self.startButton["command"] = main()   <<----- This plays out first before 
     self.startButton.grid()         making any widgets 

     self.instrButton = tk.Button(self)    #Instructions Button 
     self.instrButton["text"] = "Instructions" 
     self.instrButton["command"] = showInstructions() 
     self.instrButton.grid() 

     self.credits = tk.Button(self)     #Credits Button 
     self.credits["text"] = "Credits" 
     self.credits["command"] = showCredits() 
     self.credits.grid() 


root = tk.Tk()           #Run code using tkinter 
app = DiceGameUI(master = root) 
app.mainloop() 

'

ответ

1

Вы должны назначить только имя функции без () и аргументы

self.startButton["command"] = main 

Если вы используете () чем запустить эту функцию и результат присваивается command. Хорошо создать динамическую функцию для command.

Если вам потребуется назначить функцию, для которой требуются аргументы, вы должны использовать функцию lambda.

self.startButton["command"] = lambda:main() 

self.startButton["command"] = lambda:main("abc", 123) 

a = "abc" 
b = 123 
self.startButton["command"] = lambda arg1=a,arg2=b:main(arg1,arg2) 
self.startButton["command"] = lambda title=a,count=b:main(title,count) 

# this may not work - especially if a or b changes value (for example in loop) 
self.startButton["command"] = lambda:main(a, b) 

пример того, как использовать имя функции в собственном коде

def plus(a, b): 
    return a + b 

def minus(a, b): 
    return a - b 

def result(a, b, func_name): 
    return func_name(a,b) 

print result(10, 7, plus) # 17 
print result(10, 7, minus) # 3 
+0

вау спасибо за полное объяснение! я полностью получил бит, чтобы работать благодаря u: D – INear

+0

Вы всегда можете отметить мой ответ как принято;) – furas

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