Python:不支持&;的操作数类型:';非类型';和';非类型';使用lambda时

Python:不支持&;的操作数类型:';非类型';和';非类型';使用lambda时,python,lambda,tkinter,Python,Lambda,Tkinter,我目前正在使用lambda使tkinter按钮在彼此之后执行两项操作: def classManip(): cManip = tk.Toplevel() cManip.title('Class Manipulator') cManip.minsize(400,100) cManip.maxsize(400,100) databaseEntry = ttk.Entry(cManip, width = 25) databaseEntry.pl

我目前正在使用lambda使tkinter按钮在彼此之后执行两项操作:

def classManip():    
    cManip = tk.Toplevel()
    cManip.title('Class Manipulator')
    cManip.minsize(400,100)
    cManip.maxsize(400,100)

    databaseEntry = ttk.Entry(cManip, width = 25)
    databaseEntry.place(relx = .5, rely = .375, anchor = "c")

    entrySubmit = ttk.Button(cManip, text = "Enter", width = 20, command = lambda : connectDatabase(databaseEntry.get()) & cManip.destroy())
    entrySubmit.place(relx = .5, rely = .625, anchor="c")
    cManip.mainloop()
这是我的主代码中的函数;我在我的tkinter主窗口上有一个按钮,上面有运行此功能的命令。 connect databaseEntry函数用于在名为scripts的文件夹中形成另一个名为databaseManip的文件,我使用以下方法导入该文件:

from scripts.databaseManip import connectDatabase
该文件中的代码是:

import sqlite3, sys, os
import tkinter as tk
from win32api import GetSystemMetrics

#connects or creates database
def connectDatabase(name):
    name = str(name)
    screenWidth =  GetSystemMetrics (0)
    screenHeight =  GetSystemMetrics (1)

    if os.path.isfile("classDbFiles/" + name + ".db"):
        conn = sqlite3.connect("classDbFiles/" + name + ".db")
        tk.messagebox.showinfo(message="Connected to %s successfully" % (str(name + ".db")), title = "File Found")
    else:   
        conn = sqlite3.connect("classDbFiles/" + name + ".db")
        tk.messagebox.showinfo(message = "The database file %s was created and opened successfully" % (str(name + ".db")), title = "Success")
我想让程序做的是运行创建或打开.db文件的数据库函数,然后关闭tkinter窗口。有趣的是,它确实可以工作,但返回错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "E:\Program Files\Python\lib\tkinter\__init__.py", line 1475, in __call__
    return self.func(*args)
  File "C:\Users\Patrick\Dropbox\Computing Project\mainApp.py", line 52, in <lambda>
    entrySubmit = ttk.Button(cManip, text = "Enter", width = 20, command = lambda : connectDatabase(databaseEntry.get()) & cManip.destroy())
TypeError: unsupported operand type(s) for &: 'NoneType' and 'NoneType'
Tkinter回调中出现异常 回溯(最近一次呼叫最后一次): 文件“E:\Program Files\Python\lib\tkinter\\uuuuu init\uuuuuu.py”,第1475行,在调用中__ 返回self.func(*args) 文件“C:\Users\Patrick\Dropbox\Computing Project\mainApp.py”,第52行,在 entrySubmit=ttk.Button(cManip,text=“Enter”,width=20,command=lambda:connectDatabase(databaseEntry.get())和cManip.destroy()) TypeError:&:'NoneType'和'NoneType'的操作数类型不受支持
我一直在寻找答案,但兰姆达似乎一无所获,所以我迷路了。代码出了什么问题?

&
不会做你认为它会做的事情。它查找两个对象的按位
。相反,请尝试定义函数:

 def function():
     connectDatabase(databaseEntry.get())
     cManip.destroy()

 entrySubmit = ttk.Button(cManip, text="Enter", width=20, command=function)

您也可以用
替换
,如果第一个函数调用总是只返回
None
(或另一个假值),这将起作用,但这是一种令人讨厌的、令人讨厌的、聪明的、不可读的方法,并且可能会导致您的困惑,任何阅读你的代码的人。

&
不会做你认为它会做的事。它查找两个对象的按位
。相反,请尝试定义函数:

 def function():
     connectDatabase(databaseEntry.get())
     cManip.destroy()

 entrySubmit = ttk.Button(cManip, text="Enter", width=20, command=function)

您也可以用
替换
,如果第一个函数调用总是只返回
None
(或另一个假值),这将起作用,但这是一种令人讨厌的、令人讨厌的、聪明的、不可读的方法,并且可能会导致您的困惑,以及任何阅读您的代码的人。

因为connectDatabase不返回任何内容,所以您隐式地得到
None
,而destroy返回
None
。。。既然
None&None
没有意义。。。你得到那个错误。。。您预期会发生什么?您预期会发生什么
connectDatabase
cManip.destroy
返回什么?因为connectDatabase不返回任何内容,所以您隐式获得
None
,destroy返回
None
。。。既然
None&None
没有意义。。。你得到那个错误。。。您预期会发生什么?您预期会发生什么
connectDatabase
cManip.destroy
返回?