Python 在Macintosh(10.13.6)上使用Tkinter OptionMenu()小部件时出现奇怪的视觉行为
我正在使用一个GUI,让用户可以选择许多不同的颜色映射 问题是当Python 在Macintosh(10.13.6)上使用Tkinter OptionMenu()小部件时出现奇怪的视觉行为,python,tkinter,Python,Tkinter,我正在使用一个GUI,让用户可以选择许多不同的颜色映射 问题是当选项菜单()的下拉列表接近屏幕底部时,整个框会向下移动到一个奇怪的位置。 我不确定这是一个bug还是我做错了什么。下面提供的示例代码,以及列表框下移前后发生的情况的图像(左和右分别有7个和8个以上的其他小部件) 请注意,如果您试图重现问题,您的解决方案可能需要较长的列表/较低的下拉列表 from tkinter import * class GUI(Tk): def __init__(self): Tk._
选项菜单()的下拉列表接近屏幕底部时,整个框会向下移动到一个奇怪的位置。
我不确定这是一个bug还是我做错了什么。下面提供的示例代码,以及列表框下移前后发生的情况的图像(左和右分别有7个和8个以上的其他小部件)
请注意,如果您试图重现问题,您的解决方案可能需要较长的列表/较低的下拉列表
from tkinter import *
class GUI(Tk):
def __init__(self):
Tk.__init__(self)
self.initGUI()
def initGUI(self):
self.cmapchoice = StringVar()
self.cmapchoice.set('jet')
self.cmaps = sorted(['viridis', 'plasma', 'inferno', 'magma','binary',
'bone','spring', 'summer', 'autumn', 'winter', 'cool','hot','copper','Spectral',
'coolwarm', 'bwr', 'seismic','twilight', 'hsv', 'Paired', 'Accent', 'prism', 'ocean',
'terrain','brg', 'rainbow', 'jet'],key=lambda s: s.lower())
for i in range(8): # Change this to 7 to "fix" the issue
Label(self,text='OTHER WIDGETS').grid(row=i, column=1, sticky='WE')
OptionMenu(self,self.cmapchoice,*self.cmaps).grid(row=9, column=1, sticky='WE')
if __name__ == "__main__":
MainWindow = GUI()
MainWindow.mainloop()
虽然我仍然不确定该如何处理这个行为,但我了解到来自ttk的Combobox小部件无论如何要好得多,因为它更紧凑,在打开时不会占据整个屏幕。虽然我仍然不确定该如何处理这个行为,但我了解到来自ttk的Combobox小部件无论如何要好得多,因为它更紧凑,并且在打开时不占用整个屏幕。可以解决此问题,尽管这不是问题的确切解决方法,但解决了问题。如果打开上面的菜单(OptionMenu小部件,没有任何下拉菜单),则它将永远不会移动到屏幕底部 下拉菜单的方向可以用
菜单按钮的参数设置。就像这样
op=OptionMenu(…)
op[“方向”]=“上方”
完整示例
从tkinter导入*
类GUI(Tk):
定义初始化(自):
Tk.\uuuuuu初始(自我)
self.initGUI()
def initGUI(self):
self.cmapchoice=StringVar()
self.cmapchoice.set('jet')
self.cmaps=已排序(['viridis'、'plasma'、'inferno'、'magma'、'binary',
‘骨头’、‘春天’、‘夏天’、‘秋天’、‘冬天’、‘凉爽’、‘炎热’、‘铜’、‘光谱’,
“酷热”、“沸水反应堆”、“地震”、“曙光”、“高速列车”、“成对”、“重音”、“棱镜”、“海洋”,
‘地形’、‘brg’、‘彩虹’、‘喷气机’],键=lambda s:s.lower()
对于范围(8)中的i:#将此更改为7以“修复”问题
标签(self,text='OTHER WIDGETS').grid(row=i,column=1,sticky='WE')
op=选项菜单(self,self.cmapchoice,*self.cmaps)
op.grid(行=9,列=1,sticky='WE')
op[“方向”]=“上方”
如果名称=“\uuuuu main\uuuuuuuu”:
MainWindow=GUI()
MainWindow.mainloop()
这个问题可以有一个解决办法,虽然这不是问题的确切解决办法,但可以解决问题。如果打开上面的菜单(OptionMenu小部件,没有任何下拉菜单),则它将永远不会移动到屏幕底部
下拉菜单的方向可以用菜单按钮的参数设置。就像这样
op=OptionMenu(…)
op[“方向”]=“上方”
完整示例
从tkinter导入*
类GUI(Tk):
定义初始化(自):
Tk.\uuuuuu初始(自我)
self.initGUI()
def initGUI(self):
self.cmapchoice=StringVar()
self.cmapchoice.set('jet')
self.cmaps=已排序(['viridis'、'plasma'、'inferno'、'magma'、'binary',
‘骨头’、‘春天’、‘夏天’、‘秋天’、‘冬天’、‘凉爽’、‘炎热’、‘铜’、‘光谱’,
“酷热”、“沸水反应堆”、“地震”、“曙光”、“高速列车”、“成对”、“重音”、“棱镜”、“海洋”,
‘地形’、‘brg’、‘彩虹’、‘喷气机’],键=lambda s:s.lower()
对于范围(8)中的i:#将此更改为7以“修复”问题
标签(self,text='OTHER WIDGETS').grid(row=i,column=1,sticky='WE')
op=选项菜单(self,self.cmapchoice,*self.cmaps)
op.grid(行=9,列=1,sticky='WE')
op[“方向”]=“上方”
如果名称=“\uuuuu main\uuuuuuuu”:
MainWindow=GUI()
MainWindow.mainloop()
如果mac上有人想重现问题,只需在GUI
类中添加self.geometry('+100+250')
。根据屏幕大小可能会有所不同。如果mac上的任何人想要重现该问题,只需在GUI
类中添加self.geometry(“+100+250”)
。根据屏幕大小的不同,可能会有所不同。