如何让框架在 tkinter 中达到顶层?
How to let the frame go top level in tkinter?
tkinter怎么让frame置顶?我尝试同时使用 grid 和 place,都没有用。
另外,我想在单击任何按钮让我 select 确认或取消时显示一个小浮动 window。你能告诉我如何在 tkinter
中创建浮点数 windows
class MYGUI():
def __init__(self, root) -> None:
self.root = root
self.btn_list_names = list(range(9,-1,-1))+['.','←']
self.btn_list_btns = []
self.btn_list_cmd={
9:self.btn_9,
8:self.btn_8,
7:self.btn_7,
6:self.btn_6,
5:self.btn_5,
4:self.btn_4,
3:self.btn_3,
2:self.btn_2,
1:self.btn_1,
0:self.btn_0,
'.':self.btn_dot,
'←':self.btn_delete,
}
self.numpad_frame = Frame(self.root,width=200,height=250,bg='blue')
self.numpad_create()
def btn_9(self):
self.test_entry.focus_get().insert(END,'9')
def btn_8(self):
self.test_entry.focus_get().insert(END,'8')
def btn_7(self):
self.test_entry.focus_get().insert(END,'7')
def btn_6(self):
self.test_entry.focus_get().insert(END,'6')
def btn_5(self):
self.test_entry.focus_get().insert(END,'5')
def btn_4(self):
self.test_entry.focus_get().insert(END,'4')
def btn_3(self):
self.test_entry.focus_get().insert(END,'3')
def btn_2(self):
self.test_entry.focus_get().insert(END,'2')
def btn_1(self):
self.test_entry.focus_get().insert(END,'1')
def btn_0(self):
self.test_entry.focus_get().insert(END,'0')
def btn_dot(self):
self.test_entry.focus_get().insert(END,'.')
def btn_delete(self):
value = self.test_entry.focus_get().get()
self.test_entry.focus_get().delete(0,END)
self.test_entry.focus_get().insert(END,value[:-1])
def setup(self):
self.root.geometry('1068x681+10+10')
self.test_entry = Entry(self.root)
self.test_entry.place(x=0,y=0,width=100,height=20)
self.test_entry.bind("<FocusIn>", lambda event:self.numpad_frame.place(x=105,y=25))
self.test_entry1 = Entry(self.root)
self.test_entry1.place(x=0,y=25,width=100,height=20)
self.test_entry1.bind("<FocusIn>",lambda event:self.numpad_frame.place(x=105,y=45))
self.test_entry2 = Entry(self.root)
self.test_entry2.place(x=105,y=0,width=100,height=20)
self.test_entry2.bind("<FocusIn>", lambda event:self.numpad_frame.place(x=205,y=25))
self.test_entry3 = Entry(self.root)
self.test_entry3.place(x=105,y=25,width=100,height=20)
self.test_entry3.bind("<FocusIn>",lambda event:self.numpad_frame.place(x=205,y=45))
def numpad_create(self):
sr,sc=0,0
init_sc = sc
for b in self.btn_list_names:
cmd = self.btn_list_cmd[b]
Button(self.numpad_frame, text=b, width=5,command=cmd).grid(row=sr,column=sc)
sc += 1
if sc>=init_sc+3:
sr+=1
sc= init_sc
请看一下代码,如果能给我一些建议,非常感谢
在任何地方调用 tkraise()
框架(在您的案例中是每个 Entry 小部件)您愿意框架上升到上方:
self.test_entry.bind("<FocusIn>", lambda event:self.numpad_frame.place(x=105,y=25), self.numpad_frame.tkraise())
Could you let me know how to create the float windows in tkinter?
您可以将 tkinter.messagebox 用于此目的。使用 messagebox.askokcancel 要求用户在确认或取消之间 select。
PS:尝试将框架放置在坐标处,使其不与 Entry 小部件重叠,就像您的情况一样,因为它构建的 UI 非常差。并且请在提问时提供minimal reproducible example。
tkinter怎么让frame置顶?我尝试同时使用 grid 和 place,都没有用。 另外,我想在单击任何按钮让我 select 确认或取消时显示一个小浮动 window。你能告诉我如何在 tkinter
中创建浮点数 windowsclass MYGUI():
def __init__(self, root) -> None:
self.root = root
self.btn_list_names = list(range(9,-1,-1))+['.','←']
self.btn_list_btns = []
self.btn_list_cmd={
9:self.btn_9,
8:self.btn_8,
7:self.btn_7,
6:self.btn_6,
5:self.btn_5,
4:self.btn_4,
3:self.btn_3,
2:self.btn_2,
1:self.btn_1,
0:self.btn_0,
'.':self.btn_dot,
'←':self.btn_delete,
}
self.numpad_frame = Frame(self.root,width=200,height=250,bg='blue')
self.numpad_create()
def btn_9(self):
self.test_entry.focus_get().insert(END,'9')
def btn_8(self):
self.test_entry.focus_get().insert(END,'8')
def btn_7(self):
self.test_entry.focus_get().insert(END,'7')
def btn_6(self):
self.test_entry.focus_get().insert(END,'6')
def btn_5(self):
self.test_entry.focus_get().insert(END,'5')
def btn_4(self):
self.test_entry.focus_get().insert(END,'4')
def btn_3(self):
self.test_entry.focus_get().insert(END,'3')
def btn_2(self):
self.test_entry.focus_get().insert(END,'2')
def btn_1(self):
self.test_entry.focus_get().insert(END,'1')
def btn_0(self):
self.test_entry.focus_get().insert(END,'0')
def btn_dot(self):
self.test_entry.focus_get().insert(END,'.')
def btn_delete(self):
value = self.test_entry.focus_get().get()
self.test_entry.focus_get().delete(0,END)
self.test_entry.focus_get().insert(END,value[:-1])
def setup(self):
self.root.geometry('1068x681+10+10')
self.test_entry = Entry(self.root)
self.test_entry.place(x=0,y=0,width=100,height=20)
self.test_entry.bind("<FocusIn>", lambda event:self.numpad_frame.place(x=105,y=25))
self.test_entry1 = Entry(self.root)
self.test_entry1.place(x=0,y=25,width=100,height=20)
self.test_entry1.bind("<FocusIn>",lambda event:self.numpad_frame.place(x=105,y=45))
self.test_entry2 = Entry(self.root)
self.test_entry2.place(x=105,y=0,width=100,height=20)
self.test_entry2.bind("<FocusIn>", lambda event:self.numpad_frame.place(x=205,y=25))
self.test_entry3 = Entry(self.root)
self.test_entry3.place(x=105,y=25,width=100,height=20)
self.test_entry3.bind("<FocusIn>",lambda event:self.numpad_frame.place(x=205,y=45))
def numpad_create(self):
sr,sc=0,0
init_sc = sc
for b in self.btn_list_names:
cmd = self.btn_list_cmd[b]
Button(self.numpad_frame, text=b, width=5,command=cmd).grid(row=sr,column=sc)
sc += 1
if sc>=init_sc+3:
sr+=1
sc= init_sc
请看一下代码,如果能给我一些建议,非常感谢
在任何地方调用 tkraise()
框架(在您的案例中是每个 Entry 小部件)您愿意框架上升到上方:
self.test_entry.bind("<FocusIn>", lambda event:self.numpad_frame.place(x=105,y=25), self.numpad_frame.tkraise())
Could you let me know how to create the float windows in tkinter?
您可以将 tkinter.messagebox 用于此目的。使用 messagebox.askokcancel 要求用户在确认或取消之间 select。
PS:尝试将框架放置在坐标处,使其不与 Entry 小部件重叠,就像您的情况一样,因为它构建的 UI 非常差。并且请在提问时提供minimal reproducible example。