gpt4 book ai didi

python - ttk.Combobox 状态为只读且未聚焦时出现故障

转载 作者:太空狗 更新时间:2023-10-29 22:30:55 26 4
gpt4 key购买 nike

当 ttk.Combobox 是只读的并且没有焦点时,它的文本背景变成白色,这与灰色字段背景不同,并且使组合框看起来很难看:

Example

所需的样式将是第二个。如何使组合框像那样工作?

最佳答案

解决办法是把ttk的样式改成这样:

s = ttk.Style()
s.map("TCombobox",
selectbackground=[
('!readonly', '!focus', 'SystemWindow'),
('readonly', '!focus', 'SystemButtonFace'),
],
)

这会全局更改组合框的行为。在下面的演示中(从中制作了问题的屏幕截图)我为工作良好的组合框定义了一个自定义样式作为“Alt.TCombobox”并使用了它:

# cboxdemo.py by Adam Szieberth (2013)
# Python 3.3.0

"""Read-only Ttk.Combobox style demo module.

The style of the second combobox has been slightly modified to
make text background match with combobox background when out of
focus.

In read-only state (which is default) you can notice that text
background gets white in the first (original styled) combobox
when focus moves towards. Second combobox looks nice then.

With the button you can test that the two works exactly the same
in writeable state.
"""

from random import randint
from tkinter import Button, Frame, StringVar, Tk
from tkinter.ttk import Combobox, Style

class App(Frame):
def __init__(self, parent):
super().__init__(parent)
self.state = None
self.style = Style()
self.style.map("Alt.TCombobox",
selectbackground=[
('!readonly', '!focus', 'SystemWindow'),
('readonly', '!focus', 'SystemButtonFace'),
],
)
self.button = Button(self, text="Change state!",
command=self.switch)
self.cbox1var, self.cbox2var = StringVar(), StringVar()
self.cbox1 = Combobox(self,
exportselection=0,
values=["sex", "sleep", "eat", "drink", "dream",],
textvariable=self.cbox1var,
)
self.cbox1.bind('<<ComboboxSelected>>', self.bfocus)
self.cbox1.current(1)
self.cbox2 = Combobox(self,
exportselection=0,
values=["fear", "clarity", "power", "old age",],
style="Alt.TCombobox",
textvariable=self.cbox2var,
)
self.cbox2.bind('<<ComboboxSelected>>', self.bfocus)
self.cbox2.current(3)
self.cbox1.pack()
self.cbox2.pack()
self.button.pack()
self.switch()

def bfocus(self, *args):
if randint(0,1):
self.button.focus()
print('Focus moved!')
else:
print('Focus stayed.')

def switch(self):
if self.state == ['readonly']:
self.state = ['!readonly']
print('State is writeable!')
else:
self.state = ['readonly']
print('State is read-only!')
self.cbox1.state(self.state)
self.cbox2.state(self.state)

if __name__ == "__main__":
root = Tk()
root.title('ttk.Combobox styling')
App(root).pack()
root.mainloop()

关于python - ttk.Combobox 状态为只读且未聚焦时出现故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610519/

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