如何在窗口内的框架中对齐不同的小部件

如何解决如何在窗口内的框架中对齐不同的小部件

我正在创建一个小型学生数据库系统,我必须将标签、条目、按钮所有这些都放入其中,但对齐小部件似乎并不容易。

在尝试对齐以下条目时,我的单选按钮也消失了。请帮忙。

请看这张截图

我想对齐另一侧的所有标签、条目和按钮。

这是代码

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 方法。您使用了具有较大值的填充,这使其对齐变得更糟。尝试自行调整内边距和网格。如果仍然有问题,欢迎与我联系,我将为您提供具有良好对齐方式的代码,但如果您无法评论我,请尝试自行解决。

,

enter image description here

“地方”而不是“网格”可以用于那些单选按钮;

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)

删除 padxpady。在 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)

删除 padxpady

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?