Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ttk.OptionMenu没有轮廓/边框_Python_Tkinter - Fatal编程技术网

Python ttk.OptionMenu没有轮廓/边框

Python ttk.OptionMenu没有轮廓/边框,python,tkinter,Python,Tkinter,我在GUI中使用ttk.Optionmenu(),但当没有鼠标悬停条件时,菜单/按钮没有任何显示其边框的视觉效果,这让我很恼火。它没有给我任何元素选项,看我是否可以更改这个小部件的特定样式 如果有一种方法可以让按钮一直看起来像一个按钮,而不仅仅是当它聚焦时,我会很喜欢它。。。否则它看起来有点无聊 import tkinter as tk from tkinter import ttk root = tk.Tk() var = tk.StringVar(root) opmenu = ttk.O

我在GUI中使用
ttk.Optionmenu()
,但当没有鼠标悬停条件时,菜单/按钮没有任何显示其边框的视觉效果,这让我很恼火。它没有给我任何元素选项,看我是否可以更改这个小部件的特定样式

如果有一种方法可以让按钮一直看起来像一个按钮,而不仅仅是当它聚焦时,我会很喜欢它。。。否则它看起来有点无聊

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

var = tk.StringVar(root)
opmenu = ttk.OptionMenu(root, var, 'One', 'Two', 'Three')
opmenu.pack()

root.mainloop()
我知道如何更改小部件的
样式
,但没有一个解决它的静态外观。我尝试过“谷歌搜索”,希望找到一个解决方案,但没有用。 使用Python 3.5.2和tkinter 8.6更新:

经过一番挖掘,看起来你可以强迫这种风格从窗户上消失。它看起来不太好,但是我认为在使用
theme\u use('clam')

看看这个例子:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

var1 = tk.StringVar()
var1.set("One")

s = ttk.Style(root)
s.theme_use('clam')
s.configure('raised.TMenubutton', borderwidth=1)

opmenu = ttk.OptionMenu(root, var1, "One", "One", "Two", "Three",
                        style = 'raised.TMenubutton')

opmenu.pack()

root.mainloop()
针对您关于使用带有弹出菜单的按钮的评论,您可以执行以下操作:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

popup = tk.Menu(root, tearoff=0)
popup.add_command(label="One", command= lambda: update_btn("One"))
popup.add_command(label="Two", command= lambda: update_btn("Two"))
popup.add_command(label="Three", command= lambda: update_btn("Three"))

btn = ttk.Button(root, text="One")
btn.pack()

def update_btn(x):
    btn.config(text=x)

def btn_popup(event):
    try:
        popup.tk_popup(event.x_root, event.y_root, 0)
    finally:
        popup.grab_release()

btn.bind("<Button-1>", btn_popup)

root.mainloop()
将tkinter作为tk导入
从tkinter导入ttk
root=tk.tk()
popup=tk.菜单(根目录,tearoff=0)
弹出。添加命令(label=“One”,command=lambda:update\u btn(“One”))
弹出。添加命令(label=“Two”,command=lambda:update\u btn(“Two”))
弹出。添加命令(label=“三”,command=lambda:update\u btn(“三”))
btn=ttk.按钮(根,text=“一”)
btn.pack()
def更新_btn(x):
btn.config(text=x)
def btn_弹出窗口(事件):
尝试:
popup.tk_popup(event.x_root,event.y_root,0)
最后:
popup.grab_release()
btn.bind(“,btn\u弹出窗口)
root.mainloop()

我找到了一种永久显示vista样式边框的解决方案:

import tkinter as tk
from tkinter import ttk

# Always show the active style
def alwaysActiveStyle(widget):
    widget.config(state="active")
    widget.bind("<Leave>", lambda e: "break")

root = tk.Tk()

var = tk.StringVar(root)
opmenu = ttk.OptionMenu(root, var, 'One', 'Two', 'Three')
alwaysActiveStyle(opmenu)
opmenu.pack()

root.mainloop()
将tkinter作为tk导入
从tkinter导入ttk
#始终显示活动样式
def alwaysActiveStyle(小部件):
widget.config(state=“active”)
widget.bind(“,lambda e:“break”)
root=tk.tk()
var=tk.StringVar(根)
opmenu=ttk.OptionMenu(根,变量“一”、“二”、“三”)
alwaysActiveStyle(操作菜单)
opmenu.pack()
root.mainloop()

我希望它能解决一些问题。

问题出在哪里还不是很清楚。在Linux上测试您的代码,会提供类似于按钮的可区分外观。你是偶然使用windows吗?是的,我正在使用windows。。。抱歉,我忘了在问题中提到这一点。根据tkinter OptionMenu的许多典型可配置功能,ttk不提供这些功能。请注意,ttk OptionMenu的样式名为TMenubutton。可能有一种方法可以将普通的ttk按钮层叠在菜单按钮的顶部,并使用事件处理程序将OptionMenu或按钮置于最前面。我认为这会奏效,这是解决问题的一种方法。我在寻找一种更直接的方法。如果它能在Linux中正常工作,我很好奇为什么不能在windows中工作。。。是的,我确实通过
winfo_class()
发现了它的“TMenubutton”,谢谢。你的例子真的让我思考。但是,在示例代码中使用常规按钮,而不是在单击时将鼠标上的选项菜单按钮向前移动。它会打开一个上下文菜单。。。我很想学习如何编写ttk小部件,然后直接修改核心代码来修复它。@ernipeters我已经更新了我的答案,因为我已经发现了如何强制使用这种样式。您将需要完全配置样式以匹配所需的美学效果,但这将允许您将OptionMenu保持在“提升”状态。@ErniePeters但是这看起来需要大量工作,因此我认为您使用按钮然后提供弹出菜单的想法应该会更好。谢谢。您强制使用该样式的示例实际上告诉我,这是一个特定样式的问题,因为“clam”、“classic”等样式都具有“凸起”外观,但主windows主题样式除外。我将进一步研究这个问题,也许会在ttk核心文件中找到问题。。。我以前也在玩这些风格,但直到现在才把它们联系起来。如果我找到了解决方案,我会把它贴出来,以满足任何人的好奇心