gpt4 book ai didi

Python Tkinter : Display description in status bar

转载 作者:行者123 更新时间:2023-12-01 05:16:56 25 4
gpt4 key购买 nike

对于我的 Tkinter GUI,我已经创建了一个菜单和一个状态栏。但是,当鼠标悬停在菜单项上时如何显示描述?

请运行以下代码(例如,当鼠标悬停在菜单项“关于”上时,状态栏应写“信息”:

from Tkinter import Tk, Frame, BOTH, Menu, Label, SUNKEN, X, BOTTOM

class Application(Frame):
def __init__(self, parent):
Frame.__init__(self, parent, background = "white")
parent.configure(bg = "black")
self.pack(fill = BOTH, expand = True, padx = 20, pady = 20)

self.parent = parent

# Maximize window
self.screenWidth = self.parent.winfo_screenwidth() - 5
self.screenHeight = self.parent.winfo_screenheight() - 110
self.parent.geometry('%dx%d+%d+%d' % (self.screenWidth, self.screenHeight, 0, 0))
self.parent.resizable(0, 0)

# Status bar
self.statusBar = StatusBar(self.parent)
self.statusBar.pack(side = BOTTOM, fill = X)

# Menu bar
menubar = Menu(self.parent)
self.parent.config(menu = menubar)

self.commandMenu = Menu(menubar, tearoff = 0)
self.commandMenu.add_command(label = "Rename", command = self.onRename)
menubar.add_cascade(label = "Command", menu = self.commandMenu)

self.helpMenu = Menu(menubar, tearoff = 0)
self.helpMenu.add_command(label = "About", command = self.onAbout)
menubar.add_cascade(label = "Help", menu = self.helpMenu)

def onRename(self):
pass
def onAbout(self):
pass

class StatusBar(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.label = Label(self, bd = 1, relief = SUNKEN, anchor = "w")
self.label.pack(fill=X)
def set(self, format0, *args):
self.label.config(text = format0 % args)
self.label.update_idletasks()
def clear(self):
self.label.config(text="")
self.label.update_idletasks()

def main():
root = Tk()
Application(root)
root.mainloop()

if __name__ == '__main__':
main()

最佳答案

所以,您要找的是 <<MenuSelect>> .

如果将 self.helpMenu 绑定(bind)到 <<MenuSelect>> ,就像我更新您的代码一样:

__author__ = 'rcope'
from Tkinter import Tk, Frame, BOTH, Menu, Label, SUNKEN, X, BOTTOM

class Application(Frame):
def __init__(self, parent):
Frame.__init__(self, parent, background = "white")
parent.configure(bg = "black")
self.pack(fill = BOTH, expand = True, padx = 20, pady = 20)

self.parent = parent

# Maximize window
self.screenWidth = self.parent.winfo_screenwidth() - 5
self.screenHeight = self.parent.winfo_screenheight() - 110
self.parent.geometry('%dx%d+%d+%d' % (self.screenWidth, self.screenHeight, 0, 0))
self.parent.resizable(0, 0)

# Status bar
self.statusBar = StatusBar(self.parent)
self.statusBar.pack(side = BOTTOM, fill = X)

# Menu bar
menubar = Menu(self.parent)
self.parent.config(menu = menubar)

self.commandMenu = Menu(menubar, tearoff = 0)
self.commandMenu.add_command(label = "Rename", command = self.onRename)
menubar.add_cascade(label = "Command", menu = self.commandMenu)

self.helpMenu = Menu(menubar, tearoff = 0)
self.helpMenu.add_command(label = "About", command = self.onAbout)
menubar.add_cascade(label = "Help", menu = self.helpMenu)
self.helpMenu.bind("<<MenuSelect>>", self.statusBarUpdate)

def onRename(self):
pass
def onAbout(self):
pass

def statusBarUpdate(self, event=None):
print "Status Bar Update Called"
if self.parent.call(event.widget, "index", "active") == 0:
self.statusBar.set("About This Application")
else:
self.statusBar.set("")

class StatusBar(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.label = Label(self, bd = 1, relief = SUNKEN, anchor = "w")
self.label.pack(fill=X)
def set(self, format0, *args):
self.label.config(text = format0 % args)
self.label.update_idletasks()
def clear(self):
self.label.config(text="")
self.label.update_idletasks()

def main():
root = Tk()
Application(root)
root.mainloop()

if __name__ == '__main__':
main()

现在您唯一需要跟踪的是哪个索引对应于哪个菜单项。我建议您在每次添加菜单项时保留一个递增的 int,并通过字典使用每个索引来获取有关您需要的菜单项的任何相关信息。 Tkinter 不会通过 statusBarUpdate 回调中的条目告诉您很多信息(就像从标记为“About”的菜单命令调用的那样),因此我认为您需要自己滚动它。

关于Python Tkinter : Display description in status bar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22995932/

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