我想更改菜单栏的颜色和标题的颜色。这是我想要的例子。
有可能吗?
kknvjkwl1#
举一个例子来说明你正在尝试做什么:
import tkinter as tk from tkinter import ttk class App(tk.Tk): def __init__(self): super().__init__() self.geometry("400x200") self.configure(background='black') self.overrideredirect(1) self.attributes("-topmost", True) def startMove(self,event): self.x = event.x self.y = event.y def stopMove(self,event): self.x = None self.y = None def moving(self,event): x = (event.x_root - self.x) y = (event.y_root - self.y) self.geometry("+%s+%s" % (x, y)) def exit(self): self.destroy() def save(): print ('save') return None def add(): print('add') return None class MenuBar(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master, bd=1, relief='raised') self.master=master self.configure(background='black', cursor='hand2') file = tk.Menubutton(self, text='File', background='black', foreground='white', activeforeground='black', activebackground='white' ) file_menu = tk.Menu(file,tearoff=0) file_menu.add_command(label='save', command=save, background='black', foreground='white', activeforeground='black', activebackground='white' ) file.config(menu=file_menu) file.pack(side='left') edit = tk.Menubutton(self, text='Edit', background='black', foreground='white', activeforeground='black', activebackground='white' ) edit_menu = tk.Menu(edit,tearoff=0) edit_menu.add_command(label='add', command=add, background='black', foreground='white', activeforeground='black', activebackground='white' ) edit.config(menu=edit_menu) edit.pack(side='left') close = tk.Button(self, text='X', command=lambda:root.exit(), background='black', foreground='white') close.pack(side='right') def show(): print('show') return None def ex_it(): print('exit') return None class MainFrame(tk.LabelFrame): def __init__(self, master=None): tk.LabelFrame.__init__(self, master, bd=1, relief='raised', text='MainFrame', background='black', foreground='white') self.master=master self.note = tk.Label(self, text='Your typed chars appear here:', background='black', foreground='white', ) self.note.grid(column=0, row=0, columnspan=2, sticky='w') self.entry = ttk.Entry(self, style='My.TEntry') self.entry.grid(column=0,row=1,columnspan=3, sticky='ew') self.columnconfigure(0, weight=1) self.b_frame=tk.Frame(self, bg='black') self.b_frame.grid(column=0,row=2,sticky='w') self.sh_b = tk.Button(self.b_frame, text='Show', command=show) self.ex_b = tk.Button(self.b_frame, text='Exit', command=ex_it) self.sh_b.grid(column=0, row=0, sticky='w') self.ex_b.grid(column=1, row=0, sticky='w', padx=5) root = App() menubar = MenuBar(root) menubar.pack(side='top', fill='x') mainframe = MainFrame(root) mainframe.pack(fill='both', expand=1) menubar.bind("<Button-1>", root.startMove) menubar.bind("<ButtonRelease-1>", root.stopMove) menubar.bind("<B1-Motion>", root.moving) style = ttk.Style(root) style.element_create("plain.field", "from", "clam") style.layout("My.TEntry", [('Entry.plain.field', {'children': [( 'Entry.background', {'children': [( 'Entry.padding', {'children': [( 'Entry.textarea', {'sticky': 'nswe'})], 'sticky': 'nswe'})], 'sticky': 'nswe'})], 'border':'2', 'sticky': 'nswe'})]) style.configure("My.TEntry", foreground="white", fieldbackground="grey") root.mainloop()
玩得开心点!
首先,我使用类创建了3个对象,它们看起来像这样:从Tk()吸入的应用程序/窗口
class App(tk.Tk): def __init__(self): super().__init__()
然后是从框架中嵌入的菜单栏,看起来像:
class MenuBar(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master, bd=1, relief='raised')
以及从tkinter的LabeFrame类中继承的MainFrame:
class MainFrame(tk.LabelFrame): def __init__(self, master=None): tk.LabelFrame.__init__(self, master, bd=1, relief='raised', text='MainFrame', background='black', foreground='white')
了解有关类和init方法的更多信息click(https://micropyramid.com/blog/understand-self-and-init-method-in-python-class/)了解语法self.click(https://stackoverflow.com/a/2709832/13629335)下面我们来仔细看看这款App:
self.
self.geometry("400x200") self.configure(background='black') self.overrideredirect(1) self.attributes("-topmost", True)
width=400
height=200
self.configure(background='black')
设置或获取覆盖重定向标志。如果不为零,这将阻止窗口管理器装饰窗口。换句话说,窗口将没有标题或边框,并且不能通过普通方式移动或关闭。
(Windows)如果设置,则此窗口始终位于其他窗口的顶部。请注意,在此发行版中,此属性必须指定为"-topmost"。使用overriderirect后最大的问题是你不能再移动你的窗口了,因为窗口管理器的边框/标题-或者菜单栏都没有了。所以我们需要自己使用这段代码来实现它:
def startMove(self,event): self.x = event.x self.y = event.y def stopMove(self,event): self.x = None self.y = None def moving(self,event): x = (event.x_root - self.x) y = (event.y_root - self.y) self.geometry("+%s+%s" % (x, y))
这段代码所做的是通过使用event manger命令单击/Button-1来获取当前鼠标位置事件x或事件y表示:当前鼠标位置,以像素为单位。事件. x_根或事件. y_根表示:相对于屏幕左上角的当前鼠标位置(以像素为单位)。通过从一个中减去另一个,我们得到偏移,我们需要几何方法来"移动"。
1条答案
按热度按时间kknvjkwl1#
举一个例子来说明你正在尝试做什么:
玩得开心点!
解释
首先,我使用类创建了3个对象,它们看起来像这样:
从Tk()吸入的应用程序/窗口
然后是从框架中嵌入的菜单栏,看起来像:
以及从tkinter的LabeFrame类中继承的MainFrame:
了解有关类和init方法的更多信息click(https://micropyramid.com/blog/understand-self-and-init-method-in-python-class/)了解语法
self.
click(https://stackoverflow.com/a/2709832/13629335)下面我们来仔细看看这款App:
width=400
和height=200
。设置或获取覆盖重定向标志。如果不为零,这将阻止窗口管理器装饰窗口。换句话说,窗口将没有标题或边框,并且不能通过普通方式移动或关闭。
(Windows)如果设置,则此窗口始终位于其他窗口的顶部。请注意,在此发行版中,此属性必须指定为"-topmost"。
使用overriderirect后最大的问题是你不能再移动你的窗口了,因为窗口管理器的边框/标题-或者菜单栏都没有了。所以我们需要自己使用这段代码来实现它:
这段代码所做的是通过使用event manger命令单击/Button-1来获取当前鼠标位置
事件x或事件y表示:
当前鼠标位置,以像素为单位。
事件. x_根或事件. y_根表示:
相对于屏幕左上角的当前鼠标位置(以像素为单位)。
通过从一个中减去另一个,我们得到偏移,我们需要几何方法来"移动"。