首页 文章

tkinter按钮运行命令并销毁弹出窗口

提问于
浏览
2

我正在使用tkinter在Python 3中工作,并希望在弹出窗口中有一个按钮来运行命令并销毁弹出窗口 . 我下面的代码在前端工作,但在命令行上出错,这是一个可以解决的问题吗?

我得到的错误是:

回溯(最近一次调用最后一次):文件“C:Python34 \ lib \ tkinter__intit __ . py”,__ call__中的第1538行返回self.func(* args)文件“test.py”,第14行,在命令中= lambda:display_something ()* popup.destroy())TypeError:&''NoneType'和'NoneType'的不支持的操作数类型

from tkinter import *

class MainView(Frame):
    def __init__(self,master):
        Frame.__init__(self,master)
        self.grid()
        new_popup = Button(self,text = 'Make A Popup!',
            command = lambda: popup()).grid(row=0,column=0)


def popup():
    popup = Toplevel()
    button = Button(popup, text = 'Display something on the command line',
        command = lambda: display_something() & popup.destroy())
    button.pack()

def display_something():
    print('popup ran the command')

def main():
    root = Tk()
    root.title('Eric\'s Archiver')
    app = MainView(root)
    root.mainloop()


if __name__ == '__main__':
    main()

1 回答

  • 2

    & 是"and"运算符,但对于 bits ,不适用于 booleans .

    你需要布尔运算符 and .

    但是在你的代码中 or 应该更好用,因为第一个函数返回 None 被视为 False - 而 False and anything 总是给 False 所以不需要执行 anything . 但 False or anything 可能会给出 FalseTrue ,具体取决于 anything ,因此必须执行 anything 以获得最终结果 . ) .

    lambda: display_something() or popup.destroy()
    

相关问题