gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:08 27 4
gpt4 key购买 nike

我目前正在使用 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 窗口上有一个按钮,其中包含运行此函数的命令。连接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'

我已经寻找答案,但似乎没有任何东西适合 lambda,所以我迷路了。代码出了什么问题?

最佳答案

& 并没有像你想象的那样做。它查找两个对象的按位。相反,尝试定义函数:

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

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

您还可以将 & 替换为 and,如果第一个函数调用始终只返回 None (或另一个假值),但这是一种令人讨厌、hacky、聪明且不可读的做你想做的事情的方式,并且可能会导致你和任何阅读你的代码的人感到困惑。

关于Python:使用 lambda 时,& 不支持的操作数类型: 'NoneType' 和 'NoneType',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com