惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Help Net Security
Help Net Security
月光博客
月光博客
N
News and Events Feed by Topic
Cloudbric
Cloudbric
博客园 - 司徒正美
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tenable Blog
The Register - Security
The Register - Security
The Hacker News
The Hacker News
I
InfoQ
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
WordPress大学
WordPress大学
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
C
Cisco Blogs
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Latest news
Latest news
PCI Perspectives
PCI Perspectives
T
The Blog of Author Tim Ferriss
P
Palo Alto Networks Blog
T
Tor Project blog
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Webroot Blog
Webroot Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - 遥月

畅网n100 dc版本 黑群晖风扇转速问题 黑群晖7.x ame半洗白加激活补丁 win10/11 系统频繁重启,bcd错误或丢失 jellyfine-code1008播放器无法实例化错误、群晖系统分区空间不足解决办法 为什么nas上不用joplin而用trilium笔记? 国内dockerhub镜像2025.3.5 Docker+Gunicorn+Flask部署项目(转载) 群晖用软连接替换掉自带低版本python 群晖安装pip包管理器 docker save和docker export的区别 群晖套件正在开始...... jellyfine套件登录忘记密码 python装饰器详解 python 打包exe文件 群晖虚拟window系统,远程连接3389 群晖虚拟openwrt做旁路由 黑群晖家用改造指南 windows下写sh脚本, 在linux下执行乱报错的问题 群晖drive的文件和目录挂载软链接问题,如何一个目录多头管理 拒绝算法推荐,使用rss订阅消息与新闻!订阅源推荐! 群晖docker-compose简单应用搭建zblog+mysql博客系统
用vb6拖拽生成tkinter界面
遥月 · 2024-12-16 · via 博客园 - 遥月

http://pan.baidu.com/s/1kVLOrIn#list/path=%2F

0.简介
    这是一个VB6的ADDIN(外接程序),用于使用VB6开发工具直接拖放控件,直接可视化完成Python的TKinter的GUI布局和设计,可以在VB界面上设置
    控件的一些属性,最终自动生成必要的代码(包括回调函数框架),代码生成后仅需要在对应的回调函数中增加相应的逻辑功能代码即可。
    这个工具支持绝大部分TKiner控件,可应付一般GUI的需求。(列表参见下面的控件说明)。

1.适用对象
    适用于学习了TKinter并不想太麻烦写GUI代码,也不想用其他工具和框架,比如wxPython,PyQt4的同学。
    适用于界面不太复杂的小程序开发,界面复杂的还是适用wxPython等框架吧。因为TKinter为Python标准库,使用TKinter完成的Python程序可以称为
    “绿色软件”,不需要目标机器上安装wxPython,PyQt4等框架,只要有Python的机器就能运行。
  如果软件逻辑不是很复杂,通常一个*.py搞定,不像其他框架,需要几个文件。 2.使用方法简介 2.1 首先注册此插件,可以使用自带的安装程序,或自己手动完成。 2.2 打开VB6,新建一个标准EXE工程,在窗体上设计自己的GUI布局,这个 工作估计没有VB基础的同学都可以完成,同时可以设置相应的控件属性。 2.3 如果使用自带安装程序安装了插件,现在VB的工具条上应该有一个新 图标(一片橙红色羽毛),如果没有,到菜单"外接程序"|"外接程序管理器" 里面启动Visual Tkinter,Visual Tkinter图标和菜单应该会出现。 2.4 启动Visual Tkinter后,先按“刷新窗体列表”按钮,列出当前工程的所有 窗体和控件列表。 2.5 逐个确认各控件的输出属性,在要输出的选项前打钩,如果必要, 可以在属性列表中双击修改属性的值。(一般情况不需要再修改控件属性)。 VisualTkinter尽量的将VB控件属性翻译成Tkinter控件属性,比如字体、颜色 初始值、外观、状态等,甚至包括按钮类和菜单的快捷键设置等待。 当然了,如果部分属性没有对应关系的,需要在VisualTkinter界面上设置。 2.6 按“生成代码”按钮则在代码预览窗口生成代码,可以双击代码预览窗口 放大阅读,也可以直接修改代码。 2.7 确认完成后可以将代码拷贝到剪贴板或保持到文件。 布局可以使用百分比定位(相对定位)或绝对坐标定位(按像素定位), 百分比定位为有一个好处,主界面大小变化后,控件也可以相对变化大小。 如果不希望主界面大小变化后控件跟随变化,可以选择绝对坐标定位。 注:如果修改了以前设计的界面,可以选择仅输出main函数或界面生成类。 不影响外部已经实现的逻辑代码。 2.8 如果程序有多个GUI界面,可以在VB工程中添加窗体,就可以选择产生 哪个窗体的对应代码。 2.9 针对结构化代码,如果要在Python代码中引用和修改其他控件的值, 可以使用全局字典gComps,这个字典保存了所有的GUI元素和一些对应的 控件变量,可以直接使用形如gComps["Text1Var"].set("new Text")的代码 来访问对应控件。 如果输出的是面向对象代码,则可以在界面派生类Application中直接访问 对应的控件。

2.10 一般的GUI框架都会将UI部分和逻辑代码部分分别放在不同的文件中,在逻辑代码文件中导入UI文件,实现修改UI不影响逻辑代码。因为对于实现简单的程序来说,我偏爱单文件,所以我将UI类和逻辑代码类都放在同一个文件中,在修改界面后,你可以直接覆盖对应的Application_ui类即可实现界面的变更,不过如果增加了新的事件回调函数,需要在子类Application中增加才行。

3.目前支持的控件列表
3.1 Label
标签条在VB和Python中基本一样。如果不启用ttk,则在文本中插入\n来换行,
如果启用了ttk,则只支持单行文本(多行可以使用Message控件实现)。
3.2 TextBox
Python文本框有两种:Entry和Text,如果VB的TextBox的MultiLine=False,则
生成Entry,否则生成Text。
3.3 Frame
对应Python的LabelFrame控件,做为其他控件的容器,或做为界面元素视觉分类。
3.4 CommandButton
对应Python的Button,没有太多区别。
为了代码简洁,窗体的退出按钮可以设置Cancel属性为True,然后程序自动生成
对应Tkinter的destroy回调,这样就不需要再实现一个回调函数。
在VB里面字母前增加一个"&"符号可以直接绑定一个快捷键Alt+对应字母,
VisualTkinter也支持此设置,自动生成对应的事件绑定代码。
其他控件比如Checkbox等有"标题"属性的控件一样如此处理。
3.5 CheckBox
多选按钮对应Python的Checkbutton。
3.6 OptionButton
单选按钮对应Python的Radiobutton。
3.7 ComboBox
组合框在Tkinter中没有对应的控件,比较类似的只有OptionMenu,类似ComboBox
的Style=2 (Dropdown List)时的表现,一个下拉列表,只能在列表中选择一个值,
不能直接输入。所以建议在VB的ComboBox中写下所有的下拉列表值。
如果启用了TTK主题扩展库支持,则直接对应到TTK的Combobox,外形和行为基本
一致
3.8 ListBox
列表框对应Python的Listbox,行为也类似,可以在设计阶段设置初始列表。
如果需要滚动,则在适当位置创建滚动条,然后在Addin界面选择其xscrollcommand
和yscrollcommand属性为对应滚动条的.set方法
3.9 HScrollBar, VScrollBar
滚动条在Python中为Scrollbar,通过设置orient来控制水平还是垂直。
3.10 Slider
类似对应Python中的Scale。
3.11 PictureBox
简单对应到Python中的Canvas,用做其他控件的容器或画图容器使用。
如果需要滚动,则在适当位置创建滚动条,然后在Addin界面选择其xscrollcommand和
yscrollcommand属性为对应滚动条的.set方法。
3.12 Menu
可以使用VB的菜单编辑器来设计Python的菜单。
在VB中的菜单标题为"-"是分隔条。
也可以在正常的菜单标题中增加(&+字母)的方式添加快捷键。
3.13 Line
可以用于组织复杂界面,仅支持水平或垂直线。
===================================================
以下的控件需要在VB的'控件工具箱'中按右键添加'部件',选择
'Microsoft Windows Common Controls 6.0'
====================================================
3.14 ProgressBar
对应到Python的Progressbar,需要启用TTK主题扩展(默认)
3.15 TreeView
对应到Python的Treeview,树形显示控件,可以选择是否显示标题行,
需要启用TTK主题扩展(默认)
如果需要滚动,则在适当位置创建滚动条,然后在Addin界面选择其xscrollcommand
和yscrollcommand属性为对应滚动条的.set方法。
3.16 TabStrip
选项卡控件,对应到Python的Notebook,需要启用TTK主题扩展(默认)。
如果要布局各个页面内的控件,按以下步骤:
1.每个选项页对应一个Frame或PictureBox,命名为:TabStrip的名字
加'__Tab'(双下划线),再加一个序号,从1开始,比如TabStrip的名字为TabStrip1,
则你可以创建一个PictureBox,命名为'TabStrip1__Tab1'(注意大小写)。
2.然后在PictureBox/Frame内摆放你需要的其他控件,生成代码后此容器内自动添加
到对应的选项页,VisualTkinter会在后台为您做这一切。
标签页对应的PictureBox/Frame可以放置在窗体的可视范围外,也就是说设计好
对应的选项页后,缩小IDE中的窗体为你需要的大小。
注意:
1. 你需要使用相对坐标,PictureBox或Frame容器的大小请和TabStrip内部大小一致或
接近,否则选项页内的控件将会通过拉伸或收缩来适配可伸缩来适配可用空间,这样有些
控件看起来会比较怪。如果使用绝对坐标,则PictureBox/Frame可以不用和TabStrip
一样大,PictureBox/Frame内的控件将以TabStrip的左上角为原点放置,大小和长宽比例
会和设计时一致。
所以还是建议如果有TabStrip控件的话,使用绝对坐标。
2. Frame和PictureBox均可作为容器,如果使用Frame作为容器,则其标题可以作为选项页
标题,如果你没有设置选项页标题的话。(选项卡控件的标题设置优先)
-----------------------------------------------------
3.17 CommonDialog
这个控件也算支持,如果VB窗体中有这个控件,则在Python代码中导入
filedialog、simpledialog、colorchooser这三个模块,这三个模块提供简单的
文件选择、输入框、颜色选择对话框功能。
需要在控件工具箱增加"Microsoft Common Dialog Control 6.0"

4. 其他建议
1. 不支持使用控件数组,界面可以显示,但是后面的同名控件名会覆盖前面定义的。
2. 窗体的ScaleMode建议保持默认值(vbTwips),如果要设置为其他值,则Frame控件
内就不要再放Frame控件了,否则其内部的控件布局错误。
3. 如果仅需要简体汉字界面,则可以删掉Language.lng文件,仅需VisualTkinter.dll
一个文件。

5. ttk库额外说明
ttk主题扩展看起来很漂亮,在不同操作系统下界面呈现为本地化风格,建议使用,
只是要注意以下几个ttk的BUG:
1. TTK的Entry和Combobox控件背景色设置无效(可以设置,不报错,但是界面不变)。
2. TTK的Label中的文本不能换行,但是tkinter的Label控件可以通过插入'\n'来换行。
3. LabelFrame和Notebook控件的字体设置无效。
4. Python 2.7.3附带的ttk中的Treeview字体设置无效,但3.2.3的Treeview的字体
设置有效。