python tkinter窗体内容超出窗体,如何设置通过鼠标滚动显示完整内容?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python tkinter窗体内容超出窗体,如何设置通过鼠标滚动显示完整内容?相关的知识,希望对你有一定的参考价值。

from tkinter import *
root = Tk()

root.geometry('100x300+400+200')
s1 = Label(root,fg='teal',relief='groove',text='1111',width=17,height = 4)
s1.grid(row=1,column=3,sticky=W)
s2 = Label(root,fg='teal',relief='groove',text='2222',width=17,height = 4)
s2.grid(row=2,column=3,sticky=W)
s3 = Label(root,fg='teal',relief='groove',text='3333',width=17,height = 4)
s3.grid(row=3,column=3,sticky=W)
s4 = Label(root,fg='teal',relief='groove',text='4444',width=17,height = 4)
s4.grid(row=4,column=3,sticky=W)
s5 = Label(root,fg='teal',relief='groove',text='5555',width=17,height = 4)
s5.grid(row=5,column=3,sticky=W)
s6 = Label(root,fg='teal',relief='groove',text='6666',width=17,height = 4)
s6.grid(row=5,column=3,sticky=W)
root.mainloop()

设置窗体大小为100x300,窗体下方一部分内容不能显示,如何能不改变窗体高度,通过鼠标滚动或者显Scrollbar控件,显示完整内容?

参考技术A 简直就是在混积分。你回答的这叫什么? 参考技术B 执行文件是解释器文件时,内核如何处理exec函数的参数及解释器文件第一行的可选参数。我们知道执行解释器文件实际是执行解释器,由解释器去读取解释器文件中的语句执行,而第一行的pathname以#开头在执行时会被当做注释忽略。下面就让我们分析一下最终传入解释器foo的参数都是什么。
(1) argv[0]是该解释器文件的pathname;
(2) argv[1]是该解释文件中的可选参数;
(3) argv[2]是解释器文件本身名字;
(4) argv[3]是execl出入的第二个参数(第一个参数是arg1)。

python使用tkinter实现透明窗体的开篇之作-基础框架介绍

我一直在思索实现一个透明的窗体,然后可以基于这个窗体可以开发出各种好玩的应用(如桌面运动的小人、运动的小球、截图、录制GIF等等),今天无意间居然让我把其中一个最核心的技术难关突破了,我非常高兴,也借这个机会跟大家分享一下。

废话不多说,直接开始。

一、基础说起

(一)实现最简单的窗体

from tkinter import *

if __name__ == '__main__':

    tk = Tk()
    tk.geometry('500x400+500+150')
    tk.title('有趣的透明窗体-开篇了!!!')
    canvas = Canvas(tk)
    canvas.pack(fill=BOTH, expand=Y)
    tk.mainloop()

太简单了,不详细说了,相信大家都看得懂。
效果:
在这里插入图片描述
感觉空寥寥的,什么都没有,好无聊啊。

二、好戏开始了

也许最有趣的透明窗体就是从这么简单的代码开始。

我们可以设置一个叫做透明色的颜色,然后让窗体canvas画一个矩形框,然后将这个矩形框的内色设置成透明色,那这个窗体不就透明了吗?

呵呵,是不是太简单了。
那我们就开始设置一下。

(一)把灰色设置成透明色

TRANSCOLOUR = 'gray'
tk.wm_attributes('-transparentcolor', TRANSCOLOUR)

(二)放置一个矩形框在canvas上。

canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)

(三)大家有发现变化吗?

from tkinter import *

if __name__ == '__main__':
    TRANSCOLOUR = 'gray'
    tk = Tk()
    tk.geometry('500x400+500+150')
    tk.title('有趣的透明窗体-开篇了!!!')

    canvas = Canvas(tk)
    canvas.pack(fill=BOTH, expand=Y)

    canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)
    tk.mainloop()

发现,程序完全不鸟我的代码,还是原来的老样子。

但是逻辑没有错误啊,代码也没有报错啊,那到底哪里错了呢?

三、成功的背后总有残缺

不断摸索后,原来思路是对的,但是窗体很努力,它会不断的重复调用重画窗体的操作,也就是说在后面自动重画的过程中,程序调用默认的代码,把我设置的透明窗体覆盖了,所以,透明窗体不见了。

(一)让透明窗体不断重画的onsize函数

def on_resize(evt):
    tk.configure(width=evt.width,height=evt.height)
    canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill=TRANSCOLOUR, outline=TRANSCOLOUR)
    print(canvas.winfo_width())

(二)绑定onsize函数

tk.bind('<Configure>', on_resize)

(三)最终的效果

哈哈,效果出来了,真的透明了,开心、高兴。
在这里插入图片描述

(四)录制了个动态看看

在这里插入图片描述
好吧,写完,完整的代码就先不发了,大家有兴趣可以看上面的过程,自己整合就可以凑成完整的代码,自己动动手,也许比我直接分享最终代码的效果更好。

将一件事情做到极致,也许你会得到更大的快乐!
比心!

以上是关于python tkinter窗体内容超出窗体,如何设置通过鼠标滚动显示完整内容?的主要内容,如果未能解决你的问题,请参考以下文章

python Tkinter 基础 创建一行文字的窗体并设置窗体的标题 Label,title

(10)python tkinter-容器子窗体

python tkinter窗体编程

Python3 tkinter基础 Tk quit 点击按钮退出窗体

Python3 tkinter基础 TK title 设置窗体的标题

Python3 tkinter基础 Tk quit 点击按钮退出窗体