下面你可以看到我的GUI类中的方法代码。我一直在尝试从列表中创建一个选项菜单,但是我收到了一个错误。它说tkinter没有模块'apply'。在所有示例中,我都可以找到人们使用Tkinter而不是tkinter,那么从python 2.x到3.x的apply方法是否有变化?
我尝试过编写以下所有内容: tk.apply,tk.Apply,apply。但似乎没有任何效果。
import tkinter as tk
class GUI:
def UploadHomeworkScreen(self):
self.masternew = tk.Tk()
self.framenew = tk.Frame(self.masternew)
self.HomeworkFileEntry = tk.Entry(self.framenew)
self.ClassVariable = tk.StringVar(self.masternew)
self.ClassVariable.set(Client.ListOfClasses[0])
self.ClassChoice = tk.apply(tk.OptionMenu, (self.framenew, self.ClassVariable) + tuple(Client.ListOfClasses))
self.SubmitButton = tk.Button(self.framenew, text = "Submit", command = self.SubmitHomework)
self.HomeworkFileEntry.pack(pady = 30, padx = 10)
self.ClassChoice.pack()
self.SubmitButton.pack()
self.framenew.pack()
self.masternew.mainloop()
如果可能的话,我愿意以另一种方式创建选项菜单。
感谢。
答案 0 :(得分:1)
注意:apply()在Python 3中不存在。任何使用它的指南(特别是effbot.org上的tkinterbook)都已经过时了。
根据tkinter对class OptionMenu(Menubutton)
的定义:
OptionMenu初始化如下:
def __init__(self, master, variable, value, *values, **kwargs):
"""Construct an optionmenu widget with the parent MASTER, with
the resource textvariable set to VARIABLE, the initially selected
value VALUE, the other menu values VALUES and an additional
keyword argument command."""
考虑到这一点,您的代码行:
self.ClassChoice = tk.apply(tk.OptionMenu, (self.framenew, self.ClassVariable) + tuple(Client.ListOfClasses))
应更改为:
self.ClassChoice = tk.OptionMenu(self.framenew, self.ClassVariable, *Client.ListOfClasses)
请注意Client.ListOfClasses
前的星号。这是根据https://docs.python.org/3.7/tutorial/controlflow.html#unpacking-argument-lists将OptionMenu所需的菜单VALUES作为列表传递的。
答案 1 :(得分:0)
None
函数已在Python 3中删除。[1]不是特定于apply
的函数。要解决此问题,请使用tkinter
函数的第一个参数作为函数名称,如下所示:
您的代码:
apply
新功能:
self.ClassChoice = tk.apply(tk.OptionMenu, (self.framenew, self.ClassVariable) + tuple(Client.ListOfClasses))
或者如self.ClassChoice = tk.OptionMenu((self.framenew, self.ClassVariable) + tuple(Client.ListOfClasses))
的文档所述,“ 2to3
转换为apply(function, *args, **kwargs)
。”