【问题标题】:tkinter Python GUI Frame Positioningtkinter Python GUI 框架定位
【发布时间】:2021-09-18 12:22:51
【问题描述】:

如何定位框架(和/或框架内的元素),以使底部的单选按钮移动到 GUI 界面的左外边缘,而标题移动到 GUI 界面的中心?

图形界面

import tkinter

root = tkinter.Tk()
root.title('Bookings')
root.geometry('700x500')

frame_title = tkinter.Frame(root)
frame_fields = tkinter.Frame(root)
frame_scan = tkinter.Frame(root)
frame_credentials = tkinter.Frame(root)
frame_site = tkinter.Frame(root)
frame_change = tkinter.Frame(root)


def passx():
    pass


frame_title.grid(row=0, column=0, padx=(50, 0))
title = tkinter.Label(frame_title, text="Bookings Scan", font=("Helvetica", 24))
title.grid(pady=(27, 10))
frame_fields.grid(row=1, column=0, padx=(30, 0), pady=(10, 0))
start_date_lbl = tkinter.Label(frame_fields, text="Enter the start date: ", font=("Helvetica", 16))
start_date_lbl.grid(column=0, row=0, pady=15)
start_date_unp = tkinter.Entry(frame_fields, width=11, font=("Helvetica", 16))
start_date_unp.grid(column=1, row=0)
start_date = start_date_unp.get()
end_date_lbl = tkinter.Label(frame_fields, text="Enter the end date: ", font=("Helvetica", 16))
end_date_lbl.grid(column=0, row=1)
end_date_unp = tkinter.Entry(frame_fields, width=11, font=("Helvetica", 16))
end_date_unp.grid(column=1, row=1)
end_date = end_date_unp.get()
frame_scan.grid(row=1, column=1, padx=(45, 0))
scan_btn = tkinter.Button(frame_scan, text="Scan", command=passx, height=2, width=8, font=("Helvetica", 16))
scan_btn.grid(row=0, column=0, pady=(10, 0))
frame_credentials.grid(row=2, column=0)
credential = tkinter.IntVar(value=0)
tkinter.Radiobutton(frame_credentials, text='Username', variable=credential, value=1, font=("Helvetica", 16)).grid(column=1, row=4, sticky='W', pady=(43, 50))
tkinter.Radiobutton(frame_credentials, text='Password', variable=credential, value=2, font=("Helvetica", 16)).grid(column=1, row=5, sticky='W')
frame_site.grid(row=2, column=1, pady=(40, 0))
site = tkinter.IntVar(value=0)
tkinter.Radiobutton(frame_site, text='PearsonVUE', variable=site, value=1, font=("Helvetica", 16)).grid(column=0, row=0, sticky='W', pady=8)
tkinter.Radiobutton(frame_site, text='Kryterion', variable=site, value=2, font=("Helvetica", 16)).grid(column=0, row=1, sticky='W')
tkinter.Radiobutton(frame_site, text='PSI PAN', variable=site, value=3, font=("Helvetica", 16)).grid(column=0, row=2, sticky='W', pady=8)
tkinter.Radiobutton(frame_site, text='Scantron', variable=site, value=4, font=("Helvetica", 16)).grid(column=0, row=3, sticky='W')
tkinter.Radiobutton(frame_site, text='PSI Atlas', variable=site, value=5, font=("Helvetica", 16)).grid(column=0, row=4, sticky='W', pady=8)
frame_change.grid(row=2, column=2, padx=25, pady=(20, 0))
change_btn = tkinter.Button(frame_change, text="Change", command=passx, height=2, width=8, font=("Helvetica", 16))
change_btn.grid(column=3, row=3)
root.mainloop()

【问题讨论】:

标签: python python-3.x user-interface tkinter


【解决方案1】:

实现目标:

  • frame_title.grid(...) 中设置columnspan=3
  • frame_fields.grid(...) 中设置columnspan=2
  • frame_scan 移至第 2 列
...
frame_title.grid(row=0, column=0, columnspan=3) ### added columnspan=3
...
frame_fields.grid(row=1, column=0, padx=(30, 0), pady=(10, 0), columnspan=2) ### added columnspan=2
...
frame_scan.grid(row=1, column=2, padx=(45, 0)) ### moved to column 2
...

输出:

【讨论】:

    【解决方案2】:

    伟大而简单的问题。要在 GUI 上移动 x,y 坐标,您需要使用 place() 函数。它允许您使用绝对 x,y 坐标或相对于另一个小部件来定位小部件。

    例子:

    在本例中,三个标签使用 x,y 坐标对角定位。

    from tkinter import *
    root = Tk()
    
    root.geometry('250x200+250+200')
    Label(root, text="Position 1 : x=0, y=0", bg="#FFFF00", fg="white").place(x=5, y=0)
    Label(root, text="Position 2 : x=50, y=40", bg="#3300CC", fg="white").place(x=50, y=40)
    Label(root, text="Position 3 : x=75, y=80", bg="#FF0099", fg="white").place(x=75, y=80)
    
    root.mainloop()
    

    就是这样。这现在应该允许您在 x,y 轴上移动和定位小部件和其他文本。希望这有帮助!

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多