tkinter编程
A. python编程的tkinter窗口编译成exe文件无法正确执行
最后一行加括号,改成root.mainloop()
B. python怎么用tkinter
Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多直观的功能,比如想开发一个计算器,如果只是一个程序输入,输出窗口的话,是没用用户体验的。所有开发一个图像化的小窗口,就是必要的。
对于稍有GUI编程经验的人来说,Python的Tkinter界面库是非常简单的。python的GUI库非常多,选择Tkinter,一是最为简单,二是自带库,不需下载安装,随时使用,三则是从需求出发,Python作为一种脚本语言,一种胶水语言,一般不会用它来开发复杂的桌面应用,它并不具备这方面的优势,使用Python,可以把它作为一个灵活的工具,而不是作为主要开发语言,那么在工作中,需要制作一个小工具,肯定是需要有界面的,不仅自己用,也能分享别人使用,在这种需求下,Tkinter是足够胜任的!
C. python TKinter的主窗口运行程序完毕后,怎么让其自动关闭
采用的是main函数对主窗口运行程序完毕自动关闭的命令:
from tkinter import *def main():
root = Tk()
b = Button(root, text='退出', command=root.quit)
b.pack()
mainloop()if __name__ == '__main__':
main()

(3)tkinter编程扩展阅读:
main函数的应用:
程序执行的出发点,main,是相对而言的,正如语音学理论关注的是泛音,泛音是程序中main以外的功能,产生泛音是为了迎合思维方式而不是某种模式。有主次之分,对其实现进行了详细的分析,既可以模块化程序,又可以实现一个封闭的整体。
模块化编程方法是将整个程序划分成几个功能单一的程序模块,然后分别实现,最后,所有程序模块都像积木一样组装起来。
利用函数实现程序的模块化,大大减少了编码工作量,在函数或复合语句块中定义的自动类型变量称为局部变量。
局部变量的作用域从局部变量定义的位置开始,一直到该函数或复合语句的结尾,局部变量存活时间短。调用局部变量的函数时,将分配局部变量的内存空间,函数调用后,释放局部变量的内存空间。
函数参数和参数属于局部变量,调用函数时,将分配参数内存空间,函数调用后,参数内存空间被释放,C语言函数参数传递可分为三种情况:简单变量作为函数参数,数组名作为函数参数,指针作为函数参数。
D. 如何用tk封装一装图片
语法如下
imageobj = PhotoImage(file="xxx.gif")
1
1
请留意早期PhotoImage只支持GIF格式,现在已经接受jpg和png了,为了使用方便将GIF图片放在程序所在的文件夹中。
在标签中可以用image=imageobj参数设置此图像对象
在这里插入图片描述
实例代码
#!usr/bin/env python3
# -*- coding: UTF-8 -*-
from tkinter import *
window = Tk()
window.title("添加gif")
html_gif = PhotoImage(file="小埋.gif")
label = Label(window, image = html_gif)
label.pack()
window.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
在这里插入图片描述
添加jpg文件
如果要在标签内显示jpg需要借助PIL模块的Image和ImageTk模块,安装pillow模块
pip install pillow
1
1
引入模块
from PIL import Image, ImageTk
1
1
找一个图片
在这里插入图片描述
这个图片比较大,但是全屏应该可以显示了,代码如下:
#coding: UTF-8
from tkinter import *
from PIL import Image, ImageTk
root = Tk()
root.title("使用pillow模块插入jpg")
root.state("zoomed") #全屏
image = Image.open("Python.jpg")
pyt = ImageTk.PhotoImage(image)
label = Label(root, image=pyt)
label.pack()
root.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
在这里插入图片描述
文字与图像共存
使用Label的compound参数让文字与标签共存,compound参数设置图像的位置。
compound参数可以是下列值
left:图像在左
right:图像在右
top:图像在顶部
bottom:在下
center:文字覆盖在图像上方
实例:
#coding:UTF-8
from tkinter import *
root = Tk()
root.title("compound")
root.state("zoomed")
GText = """GitHub 是一个面向开源及私有软件项目的托管平台,\n
因为只支持 Git 作为唯一的版本库格式进行托管,\n
故名 GitHub。"""
G_gif = PhotoImage(file='Github.jpg')
label = Label(root, text=GText, image = G_gif, bg='lightyellow',
compound="left", font=("simsun", 20))
label.pack()
root.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在这里插入图片描述
文章知识点与官方知识档案匹配
Python入门技能树桌面应用开发Tkinter
211518 人正在系统学习中
点击阅读全文 简单介绍利用TK在Python下进行GUI编程的教程
我想要向您介绍能想象到的开始 GUI 编程的最简单方法,就是使用 Scriptics 的 TK 和 Tkinter 封装器。我们将与 developerWorks 中的 “Python 中的 curses 编程” 提到的 curses 库进行很多比较。除了 curses 实现文本控制台而 TK 实现 GUI 这一差别之外,这两个库有着惊人相似的接口。在使用任何一个库之前,需要基本了解窗口和事件循环,并参考可用的窗口小部件。(好,好的参考和适量的练习。)
如同关于 curses 的文章,本文仅讨论 Tkinter 本身的特性。既然很多 Python 发行版都带有 Tkinter,因此可能无需下载支持库或其它 Python 模块。本文后面的 参考资料 指向几个更高级别的用户接口窗口小部件的集合,但是您可以用 Tkinter 本身做许多事,包括构造自己的高级窗口小部件。学习基本 Tkinter 模块将为您引入 TK 的思维方式,即使您继续使用更高级的窗口小部件集合,这种思维方式仍十分重要。
TK 简要描述
TK 是与 TCL 语言关系最密切、且被广泛使用的图形库,TCL 语言和 TK 都由 John Ousterhout 开发。虽然 TK 于 1991 年作为 X11 库出现,但实际上它从那时起就被移植到每一种流行的 GUI。(它与 Python 逐渐拥有“标准”GUI 的情形相似。)现在,大多数流行语言和很多小型语言都有 TK 绑定(Tkinter 模块)。
在开始之前,我必须承认:我不是瘦小枯干的 TK 编程专家。事实上,我的大部分 TK 编程经验大约从我写这篇文章三天前才开始。那三天并非没有挑战,但是最后我觉得很好地掌握了 Tkinter。我在这里要说的是:TK 和 Tkinter 封装器设计得都非常好,便于用户操作,并且只是关于 GUI 编程最简单的介绍。
从测试应用程序开始
我们将使用 Txt2Html,这个在以前很多专栏(请参阅 参考资料 )中使用的文件格式转换程序,的封装器作为测试应用程序。虽然可以用几种方式运行 Txt2Html,但这里的封装器却要从命令行运行 Txt2Html。该应用程序以批处理进程的形式运行,并带有指出要执行的转换各方面特性的命令行自变量。(以后,最好为用户提供交互式选择屏幕选项,以在执行实际转换之前引导用户逐步选择不同的转换选项并提供所选选项的可视反馈。)
tk_txt2html 基于带有下拉菜单和嵌套子菜单的顶部菜单。旁边有详细的实现说明,它看起来与在 “Python 中的 Curses 编程” 中讨论的 curses 版本很相象。虽然 TK 用较少的代码可以实现更多的功能,但很明显,tk_txt2html 和 curses_txt2html 很相似。例如,在 TK 中,象菜单这样的特性可以依靠内置的 Tkinter 类实现,而无需从头编写。
除了设置配置选项之外,TK 封装器还包括一个与 TK Text 窗口小部件一起构建的滚动帮助框(一个带有 Message 窗口小部件的“关于”框)和一个进行 TK 动态几何管理的历史窗口。与大多数交互式应用程序一样,封装器用 TK 的 Entry 窗口小部件接受某些用户输入。
在进一步讨论代码之前,让我们看一下实际运行中的应用程序。
201541390858446.gif (565×236)
学习基本知识
实际上,Tkinter 程序只需做三件事:
最小的 [Tkinter] 程序
import Tkinter # import the Tkinter mole
root = Tkinter.Tk() # create a root window
root.mainloop() # create an event loop
这是一个完全有效的 Tkinter 程序(不要介意它没有实际用处,因为它甚至不管理 "hello world")。该程序唯一需要做的是创建一些容纳其根窗口的窗口小部件。这样增强之后,无需程序员进一步干涉,该程序的 root .mainloop() 方法调用就可以处理所有用户交互。
main() 函数
现在,我们看一下 tk_txt2html.py 更现实的 main() 函数。请注意,我更喜欢使用 John Grayson 的 import Tkinter 语句,而不是 from Tkinter import (请参阅 参考资料 中所列的他的书籍)。这不是因为我担心名称空间的干扰( from ... import 语句的通常警告),而是因为我想明确使用 Tkinter 类;我不想冒险将它们与我自己的函数和类相混淆)。建议您也这样做,至少在开始时这样做。
tk_txt2html main() 函数
def main():
global root, history_frame, info_line
root = Tkinter.Tk()
root.title('Txt2Html TK Shell')
init_vars()
#-- Create the menu frame, and menus to the menu frame
menu_frame = Tkinter.Frame(root)
menu_frame.pack(fill=Tkinter.X, side=Tkinter.TOP)
menu_frame.tk_menuBar(file_menu(), action_menu(), help_menu())
#-- Create the history frame (to be filled in ring runtime)
history_frame = Tkinter.Frame(root)
history_frame.pack(fill=Tkinter.X, side=Tkinter.BOTTOM, pady=2)
#-- Create the info frame and fill with initial contents
info_frame = Tkinter.Frame(root)
info_frame.pack(fill=Tkinter.X, side=Tkinter.BOTTOM)
# first put the column labels in a sub-frame
LEFT, Label = Tkinter.LEFT, Tkinter.Label # shortcut names
label_line = Tkinter.Frame(info_frame, relief=Tkinter.RAISED, borderwidth=1)
label_line.pack(side=Tkinter.TOP, padx=2, pady=1)
Label(label_line, text="Run #", width=5).pack(side=LEFT)
Label(label_line, text="Source:", width=20).pack(side=LEFT)
Label(label_line, text="Target:", width=20).pack(side=LEFT)
Label(label_line, text="Type:", width=20).pack(side=LEFT)
Label(label_line, text="Proxy Mode:", width=20).pack(side=LEFT)
# then put the "next run" information in a sub-frame
info_line = Tkinter.Frame(info_frame)
info_line.pack(side=Tkinter.TOP, padx=2, pady=1)
update_specs()
#-- Finally, let's actually do all that stuff created above
root.mainloop()
在这个简单的 main() 函数中有几件事要注意:
每一个窗口小部件都有一个父代。每当创建窗口小部件时,传递给实例创建的第一个自变量是新的窗口小部件的父代。
如果有其它窗口小部件创建自变量,将通过名称传递它们。Python 的这一特性给我们以指定选项或允许它们取缺省值的极大灵活性。
有几个窗口小部件实例 (Frame) 是全局变量。可以通过在函数间传递变量来使它们成为本地变量,以便维护代码范围的理论纯洁性,但是与它的实际用处相比过于麻烦。另外,使这些基本的 UI 元素全局化强调了这样一个事实:它们可以在整个函数中使用。但是,要确保对自己的全局变量使用良好的命名规范。(事先给您一个警告,Python 人员看起来讨厌匈牙利符号。)
创建完窗口小部件之后,我们调用一个几何图形管理器来让 TK 知道在哪里放置窗口小部件。TK 在计算细节信息时有许多魔力,特别是当调整窗口大小或动态添加窗口小部件时更是如此。但是在任何情况下,都需要让 TK 知道使用哪套咒语。
应用几何图形管理器
TK 提供三个几何图形管理器: .pack() 、 .grid() 和 .place() 。虽然 .place() 可用于精细(换句话说,非常复杂)的控制,但 tk_txt2html 只使用头两个。大多数时候,您将使用 .pack() 。
当然,可以不带自变量来调用 .pack() 方法。但是如果那样做,窗口小部件可能会在显示屏幕的某处结束,您可能也想为 .pack() 提供一些提示。这些提示中最重要的是 side 自变量。可能的值是 LEFT、RIGHT、TOP 和 BOTTOM(请注意这些是 Tkinter 名称空间中的变量)。
.pack() 的许多魔力来自可以将窗口小部件嵌套这一事实。特别的,除了作为其它窗口小部件的容器(它有时显示不同类型的边界)之外,Frame 窗口小部件几乎不作什么。这样,就可以很方便地在所希望的方向排列几个框架,然后在每个框架中添加其它窗口小部件。按照调用框架(以及其它窗口小部件)的 .pack() 方法的顺序来排列它们。因此,如果两个窗口小部件都请求 side=TOP ,则满足先进入的请求。
tk_txt2html 还偶尔使用 .grid() 。grid 几何图形管理器用可视的坐标线覆盖父代窗口小部件。当窗口小部件调用 .grid(row=3, column=4) 时,它请求其父代将它放在第三行第四列上。通过查看父代的所有子代的请求来计算父代的总行数和总列数。
别忘了对自己的窗口小部件应用几何图形管理器,以免在显示屏幕上看不到它们时后悔莫及。
E. python tkinter编程中如何把一个函数附加到Button上,比如写计算器中的等于号
#!/usr/bin/envpython
#-*-coding:utf-8-*-
importTkinter
classWindow:
def__init__(self,root):
self.root=root
self.setbtn=Tkinter.Button(root,text='SetText',command=self.Settxt)
#创建一个按钮对象,command=这个地方就是当按钮按下去时触发的函数
self.setbtn.place(x=120,y=15)
self.edit=Tkinter.Text(root)
self.edit.place(y=50)
self.edit.insert(Tkinter.END,"thisisoriginaltext")
defSettxt(self):
self.edit.insert(Tkinter.END,' thisisinstertext')
root=Tkinter.Tk()
window=Window(root)
root.minsize(600,480)
root.mainloop()
编写了一个最简单的例子,看了你就应该明了。
