gpt4 book ai didi

python - Tkinter.OptionMenu 没有按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:18 24 4
gpt4 key购买 nike

我已经在 python 上进行了一段时间的黑客攻击,并不是真正的程序员,所以作为最后的手段,我在这里寻求帮助。我一整天都在用谷歌搜索这个问题,但我似乎无法破解它。

在从 SE 的示例中提取的这段代码中,注释掉的行

#self.Val2Txt = Tkinter.Entry(stepOne)

工作正常。但我实际上需要 2 个下拉菜单。

所以我在注释的下面添加了这些行,

self.Val1Txt = Tkinter.OptionMenu(stepOne, 'Choose a Playlist', 'a','b','c')

当我运行脚本时,只要我触摸下拉菜单就会出现错误

AttributeError: 'str' object has no attribute 'set'

他们不接受选择

如果我点击提交按钮,我会得到错误

AttributeError: OptionMenu instance has no attribute 'get'

` ... 并且窗口仍然存在,而原始窗口会在按下提交时退出窗口。

我读到 OptionMenu 需要一个“命令”,但我不知道如何成功地做到这一点。这是代码,我希望它只是我错过/弄乱的简单内容。

    #!/usr/bin/env python

import Tkinter
from Tkinter import *
import Tkinter, tkFileDialog

class Values(Tkinter.Tk):
"""docstring for Values"""
def __init__(self, parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()

def initialize(self):
self.grid()
stepOne = Tkinter.LabelFrame(self, text=" Choose A Playlist ")
stepOne.grid(row=0, columnspan=7, sticky='W',padx=5, pady=5, ipadx=5, ipady=5)
self.Val1Lbl = Tkinter.Label(stepOne,text="Playlist")
self.Val1Lbl.grid(row=0, column=0, sticky='E', padx=10, pady=2)
#self.Val1Txt = Tkinter.Entry(stepOne)
self.Val1Txt = Tkinter.OptionMenu(stepOne, 'Choose a Playlist', 'a','b','c')
self.Val1Txt.grid(row=0, column=1, columnspan=4, pady=2, sticky='WE')
self.Val2Lbl = Tkinter.Label(stepOne,text="Directory")
self.Val2Lbl.grid(row=1, column=0, sticky='E', padx=10, pady=2)
#self.Val2Txt = Tkinter.Entry(stepOne)
self.Val2Txt = Tkinter.OptionMenu(stepOne, 'Select Something', 'd','e','f')
self.Val2Txt.grid(row=1, column=1, columnspan=4, pady=2, sticky='WE')

self.val1 = None
self.val2 = None

SubmitBtn = Tkinter.Button(stepOne, text="Submit",command=self.submit)
SubmitBtn.grid(row=4, column=3, sticky='W', padx=5, pady=2)

def submit(self):
self.val1=self.Val1Txt.get()
if self.val1=="":
Win2=Tkinter.Tk()
Win2.withdraw()

self.val2=self.Val2Txt.get()
if self.val2=="":
Win2=Tkinter.Tk()
Win2.withdraw()

self.quit()


if __name__ == '__main__':
app = Values(None)
app.title('Values')
app.mainloop() #this will run until it closes
#Print the stuff you want.
print app.val1,app.val2

最佳答案

创建选项菜单时的第一个参数是父级。你说得对。第二个参数必须是一个特殊的 tkinter 变量(例如:StringVar)。此对象具有方法 getset。但是,您没有传递这些变量之一,而是传递了一个字符串。字符串没有这些消息,这就是为什么你会得到你所说的错误。

将您的选项菜单更改为如下所示:

self.Val1Var = StringVar()
self.Val1Txt = Tkinter.OptionMenu(stepOne, self.Val1Var, 'Choose a Playlist', 'a','b','c')

稍后,当您需要该值时,可以对变量使用 get 方法:

self.val1=self.Val1Var.get()

有关 OptionMenu 的更多信息,请参阅 OptionMenu page on effbot .您还可以在“tkinter optionmenu”上进行 google 或 bing 搜索,您会发现很多与选项菜单相关的 stackoverflow 答案,以及其他讨论选项菜单的网站的链接。

关于python - Tkinter.OptionMenu 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739067/

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