我可以在画布上堆叠相框吗? (Tkinter)

时间:2019-03-31 19:56:10

标签: python-3.x tkinter

我是编码的新手,正试图制作某种EPOS类型的系统,就像我工作所在的商店的项目一样。我想堆叠一个框架以在键盘上放一个用于登录代码的键盘背景图片,仅用于程序启动。本质上,无论我如何尝试堆叠不同的Tkinter小部件,它似乎都无法正常工作。

我尝试将用于保存图像的画布放置在主Tk()中,然后将框架放在其顶部,然后使用网格结构来构建无效的键盘放置。

我尝试了不同的组合,这些组合包括哪些小部件父对象,其他小部件等,并且什么都无法工作。通常情况下,它最终没有可见的帧,并且将1920x1080图像推到屏幕的右下角。

screen_width = 1920
screen_height = 1080
screen_geometry = '{}x{}'.format(screen_width, screen_height)

main_window = Tk()
main_window.title('Shop')
main_window.resizable(0,0)
main_window.geometry(screen_geometry)

background_image = PhotoImage(master=C, file='logo.png')

C = Canvas(main_window, bg="blue", height=screen_height, width=screen_width)
background_label = Label(C, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)
C.place(x=0, y=0, relwidth=1, relheight=1)

login_window = Frame(main_window, borderwidth=5, relief=GROOVE)
login_window.config(width=10, height=10)
login_window.place(x=0, y=0, relwidth=1, relheight=1)

test_button = Button(login_window, text="test")
test_button.grid(column=0, row=0)

main_window.mainloop()

我希望将徽标放置在框架下方,然后我可以将框架与普通网格结构一起使用,但是似乎根本无法使用。

此代码杂乱无章,因此有些建设性的批评和全面的帮助将是很可爱的。

谢谢。

1 个答案:

答案 0 :(得分:0)

根据我的理解,您希望有一个登录窗口,该登录窗口的背景中心是一个键盘,窗口的中心是一个键盘。下面是示例代码:

from tkinter import *

screen_width = 1920 // 2
screen_height = 1080 // 2
screen_geometry = '{}x{}'.format(screen_width, screen_height)

main_window = Tk()
main_window.title('Shop')
main_window.resizable(0, 0)
main_window.geometry(screen_geometry)

# background image
background_image = PhotoImage(file='logo.png')
background_label = Label(main_window, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

# keypad at the center of window
login_frame = Frame(main_window)
login_frame.place(relx=0.5, rely=0.5, anchor=CENTER)

display = Label(login_frame, bg='black', font=('', 20))
display.grid(row=0, column=0, columnspan=3, sticky='ew')

def input_digit(n):
    print(n)

font = ('', 16, 'bold')
numpad = []
for number in range(9):
    row = number // 3
    col = number % 3
    btn = Button(login_frame, text=number+1, font=font, width=5, height=2)
    btn.grid(row=row+1, column=col)
    btn.config(command=lambda n=number+1:input_digit(n))
    numpad.append(btn)

main_window.mainloop()