【问题标题】:tkinter button to run command and destroy popup windowtkinter 按钮运行命令并销毁弹出窗口
【发布时间】:2017-03-09 02:49:00
【问题描述】:

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

我得到的错误是:

回溯(最近一次通话最后一次):
文件“C:Python34\lib\tkinter__intit__.py”,__call__ 中的第 1538 行
返回 self.func(*args)
文件“test.py”,第 14 行,在
命令 = lambda: display_something() * popup.destroy())
类型错误:& 不支持的操作数类型:“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()

【问题讨论】:

  • 能否将错误信息添加到问题中

标签: python tkinter


【解决方案1】:

& 是“和”运算符,但适用于 bits,而不适用于 booleans

您需要布尔运算符and

但是在您的代码中or 应该会更好,因为第一个函数返回None,它被视为False - 并且False and anything 总是给出False,因此无需执行anything。但是False or anything 可能会根据anything 给出FalseTrue,因此它必须执行anything 才能获得最终结果。)。

lambda: display_something() or popup.destroy()

【讨论】:

  • 效果很好,也感谢您的解释!
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2021-06-12
  • 2019-05-10
  • 1970-01-01
相关资源
最近更新 更多