gpt4 book ai didi

python - 使用类时如何获取 tkinter 中项目的值?

转载 作者:行者123 更新时间:2023-12-01 03:52:46 25 4
gpt4 key购买 nike

我想学习一些 tkinter。我按照 sentdex 的几个指南进行操作在 YouTube 上,感觉我对基础知识有了很好的了解。但是,现在我正在尝试编写一个用作快速日志的脚本,但我遇到了从条目/文本/选项菜单获取文本的问题。

如果我在类之外设置 gui,我可以简单地执行一个variable.get(),一切都很简单。但是当我在类中有 gui tkinter 的东西时,我得到一个未定义的异常。

这是我的代码。问题在于 def saveButtonCommand(self):

如何获取 noteText 和 officeOption/Var 的值?

# Imports
from tkinter import *
from tkinter import messagebox
import sys, datetime

class Window(Frame):

def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()

def init_window(self):
self.master.title("SPL - " + str(datetime.date.today()))
self.configure(background="#e7e7e7")
self.pack(fill=BOTH, expand=1)

# Menu -> Quit, Open Log

menu = Menu(self.master)
self.master.config(menu=menu)

file = Menu(menu)
file.add_command(label="Open Log")
file.add_command(label="Quit", command=self.client_exit)
menu.add_cascade(label="File", menu=file)

# Window Items

# Office Drop Down
OFFICES = [
"County Building",
"Adult Probation",
"Building & Zoning",
"Circuit Court",
" - CC. Family Division",
" - CC. Friend of the Court",
" - CC. Juvenile Division",
"Clerk",
"Commissioners",
"Computer Infomration Systems",
"Corporation Counsel",
"District Court",
" - DC. Community Corrections",
" - DC. Magistrate Office",
" - DC. Probation Office",
"Economic Development Corp.",
"Equalization",
"Maintenance",
"Probate Court",
"Prosecuting Attorney",
"Public Guardian",
"Register of Deeds",
"Sheriff Department",
" - SD. Booking",
" - SD. Kitchen",
" - SD. Records",
" - SD. Squadroom",
"Social Security",
"Tax Mapping/GIS",
"Treasurer",
"Veteran's"
]

officeLabel = Label(self, text="Office:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
officeLabel.place(x=5,y=5)

officeOptionVar = StringVar()
officeOptionVar.set(OFFICES[0]) # Default Value

officeOption = OptionMenu(self, officeOptionVar, *OFFICES)
officeOption.place(x=5,y=28,width=310)

# Note
noteLabel = Label(self, text="Note:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
noteLabel.place(x=5,y=58)

noteText = Text()
noteText.place(x=5, y=81, width=310, height=225)

# Save Button
saveButton = Button(self, text='Save', command=self.saveButtonCommand)
saveButton.place(x=5, y=312, width=310, height=50)

def client_exit(self):
exit()

def saveButtonCommand(self):
office = officeOptionVar.get()
note = noteText.get("1.0","end-1c")
messagebox.showinfo(title="Test", message=note)

root = Tk()
root.resizable(0,0)

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

geo_width = 320
geo_height = 370
geo_offset_w = int((screen_width/2)-(geo_width/2))

root.geometry(str(geo_width) + "x" + str(geo_height) + "+" + str(geo_offset_w) + "+200")


app = Window(root)
root.mainloop()

最佳答案

好吧,我修复了它,您应该使用 self."variable-name"来声明可访问的属性。

from tkinter import *
from tkinter import messagebox
import sys, datetime

class Window(Frame):

def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()

def init_window(self):
self.master.title("SPL - " + str(datetime.date.today()))
self.configure(background="#e7e7e7")
self.pack(fill=BOTH, expand=1)

# Menu -> Quit, Open Log

menu = Menu(self.master)
self.master.config(menu=menu)

file = Menu(menu)
file.add_command(label="Open Log")
file.add_command(label="Quit", command=self.client_exit)
menu.add_cascade(label="File", menu=file)

# Window Items

# Office Drop Down
OFFICES = [
"County Building",
"Adult Probation",
"Building & Zoning",
"Circuit Court",
" - CC. Family Division",
" - CC. Friend of the Court",
" - CC. Juvenile Division",
"Clerk",
"Commissioners",
"Computer Infomration Systems",
"Corporation Counsel",
"District Court",
" - DC. Community Corrections",
" - DC. Magistrate Office",
" - DC. Probation Office",
"Economic Development Corp.",
"Equalization",
"Maintenance",
"Probate Court",
"Prosecuting Attorney",
"Public Guardian",
"Register of Deeds",
"Sheriff Department",
" - SD. Booking",
" - SD. Kitchen",
" - SD. Records",
" - SD. Squadroom",
"Social Security",
"Tax Mapping/GIS",
"Treasurer",
"Veteran's"
]

officeLabel = Label(self, text="Office:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
officeLabel.place(x=5,y=5)

self.officeOptionVar = StringVar()
self.officeOptionVar.set(OFFICES[0]) # Default Value

officeOption = OptionMenu(self, self.officeOptionVar, *OFFICES)
officeOption.place(x=5,y=28,width=310)

# Note
noteLabel = Label(self, text="Note:", fg="#000000", bg="#e7e7e7", font="Verdana 10")
noteLabel.place(x=5,y=58)

self.noteText = Text()
self.noteText.place(x=5, y=81, width=310, height=225)

# Save Button
saveButton = Button(self, text='Save', command=self.saveButtonCommand)
saveButton.place(x=5, y=312, width=310, height=50)

def client_exit(self):
exit()

def saveButtonCommand(self):
office = self.officeOptionVar.get()
note = self.noteText.get("1.0","end-1c")
messagebox.showinfo(title="Test", message=note)

root = Tk()
root.resizable(0,0)

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

geo_width = 320
geo_height = 370
geo_offset_w = int((screen_width/2)-(geo_width/2))

root.geometry(str(geo_width) + "x" + str(geo_height) + "+" + str(geo_offset_w) + "+200")


app = Window(root)
root.mainloop()

关于python - 使用类时如何获取 tkinter 中项目的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37977302/

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