2017-10-22 9 views
0

私はPythonでプログラミング言語を作っています。
これは、これまで私が持っているコードです:Tkinterが非常に奇妙です

import tkinter as tk 
import tkinter.messagebox as m 
import sys 

class IOscriptError(Exception): 
    pass 

class Std: 
    def __init__(self): 
     self.root = tk.Tk() 
     self.root.title("STDOUT") 
     self.stdouttext = [""] 
     self.outstd = tk.Label(self.root, text=self.stdouttext) 
     self.outstd.pack() 
    def out(self, value): 
     self.stdouttext.append(value + "\n") 
     self.outstd.config(text=''.join(self.stdouttext)) 
    def start(self): 
     self.root.mainloop() 

std = Std() 

class Gui: 
    def __init__(self): 
     pass 
    def newButton(self, val, command="m.showinfo('title', 'message')"): 
     self.b=tk.Button(std.root, text=val, command=command).pack() 

gui = Gui() 

std.out("Hello!") 
std.out("How are you?") 
gui.newButton("Hello!") 
std.start() 

問題がボタンgui.bのコマンドが実行されていないということです。
私はまた、の使用を試みました。
これは機能しません!
なぜこれが起こっているのか、それを修正する方法を教えてください。

ありがとうございます!

答えて

3

問題は、関数ではなくコマンドとして文字列を渡そうとしていることです。代わりにcommand="m.showinfo('title', 'message')"の、このような何かを試してみてください。

def TestCommand(): 
    m.showinfo('title', 'message') 
class Gui: 
    def __init__(self): 
     pass 
    def newButton(self, val, command=TestCommand): 
     self.b=tk.Button(std.root, text=val, command=command).pack() 

は、ボタンのコンストラクタは、文字列をコマンドパラメータとして 機能を取り、ではないことに注意してください。

+0

ああ、ok ...ああ... IM DUMB! :P私はラムダではなく文字列を使用しました! – o0000000000000000000000000000o

関連する問題