发布于2019-08-28 11:43 阅读(1646) 评论(0) 点赞(7) 收藏(2)
在用tkinter写界面的时候,想要界面被拖动变大变小的时候,界面里面的零件(按钮、文本一类)也跟着一起变动,该怎么办呢?
可以通过在界面里面添加Frame,然后把零件都写在Frame里面,通过grid来给零件和Frame定位,注意一定要在grid里面写好sticky,这样就可以实现啦
首先import tkinter.messagebox
from tkinter import *
class Login1(object):
def __init__(self, root):
self.root = root
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
# variables
self.varName = StringVar(value='')
self.varPwd = StringVar(value='')
# labels
self.labelEmail = tkinter.Label(self.root, text='邮箱')
self.labelPwd = tkinter.Label(self.root, text='密码')
# entries
self.entryEmail = tkinter.Entry(self.root, textvariable=self.varName)
self.entryPwd = tkinter.Entry(self.root, show='*', textvariable=self.varPwd)
# buttons
self.buttonOk = tkinter.Button(self.root, text='登录')
self.buttonCancel = tkinter.Button(self.root, text='取消')
self.buttonExchange = tkinter.Button(self.root, text='注册')
self.arrange()
self.root.mainloop()
def arrange(self):
self.labelEmail.grid(row=0, padx=10, pady=10)
self.labelPwd.grid(row=1, padx=10, pady=10)
self.entryEmail.grid(row=0, column=1, padx=10, pady=10, columnspan=2)
self.entryPwd.grid(row=1, column=1, padx=10, pady=10, columnspan=2)
self.buttonOk.grid(row=3, column=0, padx=10, pady=10 )
self.buttonCancel.grid(row=3, column=1, padx=10, pady=10 )
self.buttonExchange.grid(row=3, column=2, padx=10, pady=10,)
root=tkinter.Tk()
root.title('注册')
if __name__=="__main__":
Login1(root)
以上代码的效果是
可以注意到,当我们拖动边框右边的时候,零件不自然移动。
加入一个frame作为框架,再写入sticky
class Login(object):
def __init__(self, root):
self.root = root
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
#######################################################
self.frame = Frame(self.root)
self.frame.grid(row=0, padx=10, pady=10, sticky=NSEW)
#######################################################
# variables
self.varName = StringVar(value='')
self.varPwd = StringVar(value='')
# labels
self.labelEmail = tkinter.Label(self.frame, text='邮箱')
self.labelPwd = tkinter.Label(self.frame, text='密码')
# entries
self.entryEmail = tkinter.Entry(self.frame, textvariable=self.varName)
self.entryPwd = tkinter.Entry(self.frame, show='*', textvariable=self.varPwd)
# buttons
self.buttonOk = tkinter.Button(self.frame, text='登录')
self.buttonCancel = tkinter.Button(self.frame, text='取消')
self.buttonExchange = tkinter.Button(self.frame, text='注册')
self.arrange()
self.root.mainloop()
def arrange(self):
self.frame.rowconfigure(0, weight=1)
self.frame.rowconfigure(1, weight=1)
self.frame.rowconfigure(2, weight=1)
self.frame.columnconfigure(0, weight=1)
self.frame.columnconfigure(1, weight=1)
self.frame.columnconfigure(2, weight=1)
#######################################################
self.labelEmail.grid(row=0, sticky=NSEW, padx=10, pady=10)
self.labelPwd.grid(row=1, sticky=NSEW, padx=10, pady=10)
self.entryEmail.grid(row=0, column=1, padx=10, pady=10, columnspan=2, sticky=EW)
self.entryPwd.grid(row=1, column=1, padx=10, pady=10, columnspan=2, sticky=EW)
self.buttonOk.grid(row=3, column=0, padx=10, pady=10, sticky=NSEW)
self.buttonCancel.grid(row=3, column=1, padx=10, pady=10, sticky=NSEW)
self.buttonExchange.grid(row=3, column=2, padx=10, pady=10, sticky=NSEW) #######################################################
有改动的代码我都用#######框出来了,以方便读者参阅。
我们看看效果:
可以看到这个界面很自然的被拉长。
以上是我的代码和方法,如有问题欢迎指出。
谢谢大家!
作者:好难受
链接:https://www.pythonheidong.com/blog/article/65792/82571e4a19d0a8b042ca/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!