举例说明您尝试做的事情:
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()
Run Code Online (Sandbox Code Playgroud)
玩得开心!
首先,我使用类创建了 3 个对象,它们如下所示:
该应用程序lication /我们的窗口,从Tk的inharets()
class App(tk.Tk):
def __init__(self):
super().__init__()
Run Code Online (Sandbox Code Playgroud)
然后是来自 Frame 的菜单栏,看起来像:
class MenuBar(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master, bd=1, relief='raised')
Run Code Online (Sandbox Code Playgroud)
以及来自 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')
Run Code Online (Sandbox Code Playgroud)
要了解有关类和 init 方法的更多信息[单击]
了解语法self. [单击]
让我们仔细看看应用程序:
self.geometry("400x200")
self.configure(background='black')
self.overrideredirect(1)
self.attributes("-topmost", True)
Run Code Online (Sandbox Code Playgroud)
width=400和height=200。self.configure(background='black')
Run Code Online (Sandbox Code Playgroud)
设置或获取覆盖重定向标志。如果非零,这会阻止窗口管理器装饰窗口。换句话说,窗口将没有标题或边框,也无法通过普通方式移动或关闭。
(Windows) 如果设置,则此窗口始终位于其他窗口之上。请注意,在此版本中,此属性必须指定为“-topmost”。
使用 overrideredirect 后的最大问题是您无法再移动窗口,因为窗口管理器不再有边框/标题或菜单栏。所以我们需要使用这个代码自己携带它:
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))
Run Code Online (Sandbox Code Playgroud)
这段代码的作用是通过使用事件管理器单击/Button-1 来获取当前鼠标位置
event.x 或 event.y 表示:
当前鼠标位置,以像素为单位。
event.x_root 或 event.y_root 表示:
当前鼠标相对于屏幕左上角的位置,以像素为单位。
并通过与其他从其减去一个我们得到的偏移,我们需要为我们的几何方法来“搬家”。
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |