如何解决如何在窗口内的框架中对齐不同的小部件
我正在创建一个小型学生数据库系统,我必须将标签、条目、按钮所有这些都放入其中,但对齐小部件似乎并不容易。
在尝试对齐以下条目时,我的单选按钮也消失了。请帮忙。
请看这张截图
我想对齐另一侧的所有标签、条目和按钮。
这是代码
import tkinter
from tkinter import *
from tkinter import ttk
mainwindow = Tk()
mainwindow.title('Student Database')
mainwindow.config(bg='#4d4d4d')
#centering the main window on screen
def centrewindow(w,h):
ws = mainwindow.winfo_screenwidth()
hs = mainwindow.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) -(h/2)
mainwindow.geometry('%dx%d+%d+%d' % (w,h,x,y))
centrewindow(900,500)
#Creatiing Main Frame of our GUI
mainframe = Frame(width= 500,height= 350,bg= '#d9d9d9',bd= 0.3,relief= SOLID)
mainframe.pack(pady=150,padx= 250,fill='both',expand=True)
#Creating Tab Control here
tabcontrol = ttk.Notebook(mainframe)
#Tab1 for Regiratation for new students
tab1 = ttk.Frame(tabcontrol)
tabcontrol.add(tab1,text='New Student')
studentnamelabel = Label(tab1,text='Enter Student Name:',font=('Open Sans Semibold',12))
studentnamelabel.grid(row=0,column=0,padx= 50,pady= 10)
studentnameentry = Entry(tab1,width= 70)
studentnameentry.grid(row=0,column=1,padx=300,pady= 10)
rollnolabel = Label(tab1,text='Enter Rollno:',12))
rollnolabel.grid(row=1,padx= 100,pady= 10)
rollnoentry = Entry(tab1,width= 70)
rollnoentry.grid(row=1,pady= 10)
genderlabel = Label(tab1,text='Select Gender:',12))
genderlabel.grid(row=2,padx= 20,pady= 10)
genderradio1 = Radiobutton(tab1,text='Male',value= 1)
genderradio1.grid(row=2,padx=100,pady=10)
genderradio2 = Radiobutton(tab1,text='Female',value= 2)
genderradio2.grid(row=2,column=2,padx=10,pady=10)
tab2 = ttk.Frame(tabcontrol)
tabcontrol.add(tab2,text='Tab no. 2')
l2 = Label(tab2,text='Hello Its Tab 2')
l2.pack()
tabcontrol.pack(expand=1,fill='both')
mainwindow.mainloop()
解决方法
对齐小部件并不像看起来那么容易。为了对齐小部件,我们有三种不同的方法(pack、grid、place),您使用了我也更喜欢的 grid 方法。您使用了具有较大值的填充,这使其对齐变得更糟。尝试自行调整内边距和网格。如果仍然有问题,欢迎与我联系,我将为您提供具有良好对齐方式的代码,但如果您无法评论我,请尝试自行解决。
,“地方”而不是“网格”可以用于那些单选按钮;
genderradio1 = Radiobutton(tab1,text='Male',value= 1)
genderradio1.place(x=700,y=100)
genderradio2 = Radiobutton(tab1,text='Female',value= 2)
genderradio2.place(x=750,y=100)
如果您想重新定位,您可以更改两者的 x 值(我想我设法将按钮正确定位到 y 轴上。但如果不方便,您可以进行调整)。请记住,减小 x 值会将按钮定位到左侧,反之亦然;同样,减小 y 值会移动顶部的按钮,反之亦然。请检查以下;
import tkinter
from tkinter import *
from tkinter import ttk
mainwindow = Tk()
mainwindow.title('Student Database')
mainwindow.config(bg='#4d4d4d')
#centering the main window on screen
def centrewindow(w,h):
ws = mainwindow.winfo_screenwidth()
hs = mainwindow.winfo_screenheight()
x = (ws/2) - (w/2)
y = (hs/2) -(h/2)
mainwindow.geometry('%dx%d+%d+%d' % (w,h,x,y))
centrewindow(900,500)
#Creatiing Main Frame of our GUI
mainframe = Frame(width= 500,height= 350,bg= '#d9d9d9',bd= 0.3,relief= SOLID)
mainframe.pack(pady=150,padx= 250,fill='both',expand=True)
#Creating Tab Control here
tabcontrol = ttk.Notebook(mainframe)
#Tab1 for Regiratation for new students
tab1 = ttk.Frame(tabcontrol)
tabcontrol.add(tab1,text='New Student')
studentnamelabel = Label(tab1,text='Enter Student Name:',font=('Open Sans Semibold',12))
studentnamelabel.grid(row=0,column=0,padx= 50,pady= 10)
studentnameentry = Entry(tab1,width= 70)
studentnameentry.grid(row=0,column=1,padx=300,pady= 10)
rollnolabel = Label(tab1,text='Enter Rollno:',12))
rollnolabel.grid(row=1,padx= 100,pady= 10)
rollnoentry = Entry(tab1,width= 70)
rollnoentry.grid(row=1,pady= 10)
genderlabel = Label(tab1,text='Select Gender:',12))
genderlabel.grid(row=2,padx= 20,pady= 10)
genderradio1 = Radiobutton(tab1,y=100)
tab2 = ttk.Frame(tabcontrol)
tabcontrol.add(tab2,text='Tab no. 2')
l2 = Label(tab2,text='Hello Its Tab 2')
l2.pack()
tabcontrol.pack(expand=1,fill='both')
mainwindow.mainloop()
,
使用 sticky
中的 grid()
选项对齐文本标签,
studentnamelabel = Label(tab1,sticky=E)
和 删除 padx
和 pady
。在 columnspan=2
上设置 Entry.grid()
,然后再次设置 sticky
以使 radiobuttons
对齐,
studentnameentry = Entry(tab1,columnspan=2,pady= 10)
和,
genderradio1 = Radiobutton(tab1,value= 1)
genderradio1.grid(row=2,sticky=E)
genderradio2 = Radiobutton(tab1,value= 2)
genderradio2.grid(row=2,column=2,sticky=W)
和删除 padx
和 pady
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。