Tkinter非常奇怪

时间:2017-10-22 02:35:56

标签: python tkinter python-3.6

所以我用Python编写了一种编程语言 这是我到目前为止的代码:

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的命令没有运行 我也试过使用 它只是不起作用!
你能告诉我为什么会发生这种情况以及如何解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分: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()

请记住,Button构造函数将函数作为命令参数,而不是字符串。