python为text添加滚动条_在Tkinter中向一组小部件添加滚动条

概述

您只能将滚动条与一些小部件关联起来,根小部件和Frame不是那组小部件的一部分。

最常见的解决方案是创建一个画布小部件,并将滚动条与该小部件关联起来。然后,将包含标签小部件的框架嵌入到画布中。确定框架的宽度/高度,并将其输入画布。scrollregion选项,以便滚动区域与框架的大小完全匹配。

在画布上直接绘制文本项并不困难,因此如果画布框架内嵌解决方案看起来过于复杂,您可能需要重新考虑这种方法。由于要创建网格,每个文本项的坐标将非常容易计算,特别是如果每一行的高度相同(如果使用单一字体,可能就是这样)。

要在画布上直接绘图,只需计算出所使用字体的线条高度(这方面有一些命令)。然后,每个y坐标是row*(lineheight+spacing)..x坐标将是基于每列中最宽项的固定数。如果为列中的所有项都赋予标记,则可以使用单个命令调整列中所有项的x坐标和宽度。

面向对象的解决方案

下面是一个使用面向对象方法的画布框架内嵌解决方案的示例:import tkinter as tkclass Example(tk.Frame):

def __init__(self, root):

tk.Frame.__init__(self, root)

self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")

self.frame = tk.Frame(self.canvas, background="#ffffff")

self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview)

self.canvas.configure(yscrollcommand=self.vsb.set)

self.vsb.pack(side="right", fill="y")

self.canvas.pack(side="left", fill="both", expand=True)

self.canvas.create_window((4,4), window=self.frame, anchor="nw",

tags="self.frame")

self.frame.bind("", self.onFrameConfigure)

self.populate()

def populate(self):

'''Put in some fake data'''

for row in range(100):

tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1",

relief="solid").grid(row=row, column=0)

t="this is the second column for row %s" %row

tk.Label(self.frame, text=t).grid(row=row, column=1)

def onFrameConfigure(self, event):

'''Reset the scroll region to encompass the inner frame'''

self.canvas.configure(scrollregion=self.canvas.bbox("all"))if __name__ == "__main__":

root=tk.Tk()

Example(root).pack(side="top", fill="both", expand=True)

root.mainloop()

程序解决方案

以下是不使用对象的解决方案:import tkinter as tkdef populate(frame):

'''Put in some fake data'''

for row in range(100):

tk.Label(frame, text="%s" % row, width=3, borderwidth="1",

relief="solid").grid(row=row, column=0)

t="this is the second column for row %s" %row

tk.Label(frame, text=t).grid(row=row, column=1)def onFrameConfigure(canvas):

'''Reset the scroll region to encompass the inner frame'''

canvas.configure(scrollregion=canvas.bbox("all"))root = tk.Tk()canvas = tk.Canvas(root, borderwidth=0, background="#ffffff")frame =

tk.Frame(canvas, background="#ffffff")vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview)canvas.configure

(yscrollcommand=vsb.set)vsb.pack(side="right", fill="y")canvas.pack(side="left", fill="both", expand=True)canvas.create_window((4,4),

window=frame, anchor="nw")frame.bind("", lambda event, canvas=canvas: onFrameConfigure(canvas))populate(frame)root.mainloop()

注:若要在python2.x中执行此操作,请使用Tkinter而不是tkinter在导入语句中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 图像模板匹配并标注

01—需求这个是粉丝在我的技术群提的一个需求1、 模板匹配 :功能:(1)在一张大图像中,选取一小块区域作为模板(2)可在大图像中匹配到模板图像和位置。模板匹配是图像处理中最基本、最常用的匹配方…

深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]

上篇《深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete》介绍了insert、update、delete的用法,本篇将介绍select、resultMap的用法。select无疑是我们最常用,也是最复杂的,mybatis通过resultMa…

李洪强经典面试题146-网络

李洪强经典面试题146-网络 网络 http请求方式? 通常,HTTP的请求方式有3种,分别是:POST、GET、HEAD。POST和GET方法是用于数据发送的。 POST:它将要发送的数据单独放在一个流中进行发送,而不是附加在URL地址…

北大保送、硕博连读!《西游记》红孩儿扮演者现成中科院博士!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自:募格学术86版《西游记》可以说是很多人的记忆,男女老幼几乎都看过这个版本,虽然已经过去三十多年,但如今依旧是经典无法超越之作。看过86版《西游记》的小伙伴应该都还记得里面牛魔…

Android插件化开发之运行未安装apk的activity

1、介绍 我们知道PathClassLoader是一个应用的默认加载器(而且他只能加载data/app/xxx.apk的文件),但是我们加载插件一般使用DexClassLoader加载器,所以这里就有问题了,其实如果对于开始的时候,每个人都会认为很简单,…

理解UI线程——SWT, Android, 和Swing的UI机理

2019独角兽企业重金招聘Python工程师标准>>> 在做GUI的时候, 无论是SWT, AWT, Swing 还是Android, 都需要面对UI线程的问题, UI线程往往会被单独的提出来单独对待, 试着问自己, 当GUI启动的时候, 后台会运行几个线程? 比如 1. SWT 从Main函数启动 2. Swing 从Ma…

python自动填写小程序表单_新年好!教大家用Python写一个自动回复拜年信息的小程序!...

原标题:新年好!教大家用Python写一个自动回复拜年信息的小程序!过年期间,想必大家都收到很多拜年信息吧!有没有也被拜年短信(大部分是群发)搞得很焦虑?不回复似乎显得很没有礼貌,一一回复又累心…

C#多线程开发-并发集合中的ConcurrentQueue

前言大家好,我是阿辉。上一篇博文简单介绍了C#中支持并发的数据字典,简单举例说明比较了常规集合与ConcurrentDictionary的读写速度。下来简单介绍其中一个线程安全队列ConcurrentQueue;ConcurrentQueue队列我们不陌生,在数据结构这门课中就有…

HDU 5141

这个题 LIS 并查集的思想 链式前向星 要求找s(i,j)使i j 能有最长的LIS 。。。 做法是枚举每一个j 即终点 算 起点 的可能 无力吐槽了 bc 的时候写错了一个地方 导致TLE 后来幡然醒悟了 改了就a了 不想说什么了 直接上代码 #include <cstdio> #include <…

MySQL存储过程相互调用

什么都不说了上代码&#xff1a; 方式一&#xff1a; 第一个存储过程&#xff1a;test1,参数如下&#xff1a;IN user_name VARCHAR(50),OUT uid bigint(20) BEGIN#Routine body goes here...DECLARE u_id BIGINT(20) DEFAULT 11;SELECT user_id INTO uid FROM tbl_useralias …

一个人动情之后的表现......

1 卖家能有什么坏心思呢&#xff08;via.城与橙与澄&#xff0c;侵删&#xff09;▼2 严重怀疑传了答案▼3 别说我还真没留意到&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 领导说“辛苦了”&#xff0c;你要怎么回答▼5 哦吼&#xff08;素材来源网络&#…

Android之推荐看的Android源码

推荐阅读的源码 AOSP项目这么庞大,就算是Framework部分也有够看上一阵子的,所以推荐从常用的看起,由浅及深,同时向横向和纵向深入阅读。 开始 Handler-Message-Looper Handler被称为“异步提交器”,是Android开发入门教程必定谈及的东西,这也是Activity等组件的工作机…

线性代数第五版吉尔伯特课后答_线性代数同济第五版第六章课后习题答案!

搜集 | 整理 | 测试 | 小愉免责声明&#xff1a;以下资源或软件均来自互联网&#xff0c;仅供学习和交流使用&#xff0c;如有侵权请联系删除&#xff0c;请勿用于商业和非法途径等&#xff0c;如有法律纠纷与本人无关&#xff01;本文未经允许&#xff0c;不得转载&#xff0…

2021,我的输入输出

前言2021年&#xff0c;我到底进行了哪些输入&#xff0c;又是如何输出的&#xff0c;借由这篇文章回顾一下。新技术.NET技术日新月异&#xff0c;今年我也尝试学习了其中一部分。BlazorBlazor允许我们使用C#而不是JavaScript构建交互式客户端Web应用程序&#xff0c;对于后端出…

iOS笔记之UIKit_UINavigationController

//设置导航条的样式 self.navigationController.navigationBar.barStyle UIBarStyleBlackTranslucent; //默认是白色 Bar 字体颜色黑色&#xff0c;如果样式设置黑色&#xff0c;对应的字体就是白色。 //定义导航条的时候使用 self.navigationController.navigationBar.trans…

字符串之找到字符串的最大无重复字符串子串

题目: 字符串之找到字符串的最大无重复字符子串 举例: str = "adcd" return 4 str = "aabcd" I know this str is adc so return 3 要求: 时间复杂度为O(N) 代码实现: package com.chenyu.string.cn;public class MaxUnique {public static v…

hive日期函数

今天select from_unixtime(unix_timestamp(),yyyy-MM-dd HH:mm:ss) UNIX时间戳转日期函数: from_unixtime 语法: from_unixtime(bigint unixtime[, string format]) 返回值: string 说明: 转化UNIX时间戳&#xff08;从1970-01-01 00:00:00 UTC到指定时间的秒数&#xff09;到…

sql长整型_SQL 性能优化梳理

先简单梳理下Mysql的基本概念&#xff0c;然后分创建时和查询时这两个阶段的优化展开。1 基本概念简述1.1 逻辑架构第一层&#xff1a;客户端通过连接服务&#xff0c;将要执行的sql指令传输过来第二层&#xff1a;服务器解析并优化sql&#xff0c;生成最终的执行计划并执行第三…

网络的东西南北

前一陣子連續出差, 加上許多的內部會議, 搞的差點想去撞牆把自己搞昏之後就可以休息一下. 但是家中還有嗷嗷待哺的嬰兒需要爸爸幫他洗屁屁, 所以只有咬牙繼續撐下去. 不過這兩個月來, 不過在公司內部還是外部, 我都收到一樣類似的老問題那就是&#xff1a;&#xff08;認識我的…