Как изменить ширину границы и рельеф 1 ттк комбинации

#python #tkinter #combobox #ttk #ttkwidgets

#питон #tkinter #комбинированный набор #ттк #ttkwidgets

Вопрос:

Я хочу изменить ширину границы и рельеф комбинации ttk. Но я хочу изменить эти атрибуты только для 1 комбинации. Есть ли способ сделать так, чтобы ширина второй комбинации составляла 3, а рельеф был сплошным, как в текстовом поле 2?

 import tkinter as tk from tkinter import font as tkfont, filedialog, messagebox from tkinter.ttk import Combobox  class SLS_v1(tk.Tk):   def __init__(self, *args, **kwargs):  tk.Tk.__init__(self, *args, **kwargs)   # Setting up the root window  self.title('APP')  self.geometry("552x700")  self.resizable(False, False)   self.title_font = tkfont.Font(family='Helvetica', size=18, weight="bold", slant="italic")   container = tk.Frame(self)  container.pack(side="top", fill="both", expand=True)  container.grid_rowconfigure(0, weight=1)  container.grid_columnconfigure(0, weight=1)   self.frames = {}   self.frames["MenuPage"] = MenuPage(parent=container, controller=self)    self.frames["MenuPage"].grid(row=0, column=0, sticky="nsew")   self.show_frame("MenuPage")    def show_frame(self, page_name):  '''Show a frame for the given page name'''  frame = self.frames[page_name]  frame.tkraise()   class MenuPage(tk.Frame):   def __init__(self, parent, controller):  tk.Frame.__init__(self, parent)  self.controller = controller   text1 = tk.Text(self, width=25, height=1)  text1.pack(pady=20)   combobox1 = tk.ttk.Combobox(self, width=25, height=2, state='readonly')  combobox1.pack(pady=20)   text2 = tk.Text(self, width=50, borderwidth=3, relief='solid', height=1)  text2.pack(pady=20)   combobox2 = tk.ttk.Combobox(self, width=50, height=5, state='readonly')  combobox2.pack(pady=20)   if __name__ == "__main__":  app = SLS_v1()  app.mainloop()  

Ответ №1:

Чтобы изменить ttk объекты, вы должны определить стиль следующим образом.

 def __init__(self, *args, **kwargs):  tk.Tk.__init__(self, *args, **kwargs)   self.style = ttk.Style(self)  self.style.theme_use("default")  

Затем вы можете определить специфику для вашего Combobox подобного.

 self.style.configure("K.TCombobox",  **dict(  padding = 1, arrowsize = 12,  borderwidth = 3, relief = "solid"))  

Полная реализация, подобная этой.

 combobox2 = Combobox(self, width=50, height=5, state='readonly', style = "K.TCombobox")  

Комментарии:

1. Это частично работает. Это позволило мне изменить некоторые функции, но, похоже, рельеф не работает, и я не могу сделать фон черным, как в текстовом поле.

2. Да , странно, как relief управляет кнопка объемного звучания вместо Combobox , в то время borderwidth как влияет на Combobox .