程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

python UI 之使用tkinter库制作界面时实现拖动时零件跟随变化

发布于2019-08-28 11:43     阅读(1645)     评论(0)     点赞(7)     收藏(2)


python UI 之使用tkinter库制作界面时实现拖动时零件跟随变化

在用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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

以上代码的效果是
在这里插入图片描述
在这里插入图片描述
可以注意到,当我们拖动边框右边的时候,零件不自然移动。

解决办法

加入一个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) #######################################################
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

有改动的代码我都用#######框出来了,以方便读者参阅。
我们看看效果:
在这里插入图片描述
在这里插入图片描述
可以看到这个界面很自然的被拉长。

以上是我的代码和方法,如有问题欢迎指出。
谢谢大家!



所属网站分类: 技术文章 > 博客

作者:好难受

链接:https://www.pythonheidong.com/blog/article/65792/82571e4a19d0a8b042ca/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)