python tkinter frame加入窗口_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)转...

Tkinter支持16个核心的窗口部件,这个16个核心窗口部件类简要描述如下:

Button:一个简单的按钮,用来执行一个命令或别的操作。

Canvas:组织图形。这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件。

Checkbutton:代表一个变量,它有两个不同的值。点击这个按钮将会在这两个值间切换。

Entry:文本输入域。

Frame:一个容器窗口部件。帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组织其它的窗口部件。

Label:显示一个文本或图象。

Listbox:显示供选方案的一个列表。listbox能够被配置来得到radiobutton或checklist的行为。

Menu:菜单条。用来实现下拉和弹出式菜单。

Menubutton:菜单按钮。用来实现下拉式菜单。

Message:显示一文本。类似label窗口部件,但是能够自动地调整文本到给定的宽度或比率。

Radiobutton:代表一个变量,它可以有多个值中的一个。点击它将为这个变量设置值,并且清除与这同一变量相关的其它radiobutton。

Scale:允许你通过滑块来设置一数字值。

Scrollbar:为配合使用canvas, entry, listbox, and text窗口部件的标准滚动条。

Text:格式化文本显示。允许你用不同的样式和属性来显示和编辑文本。同时支持内嵌图象和窗口。

Toplevel:一个容器窗口部件,作为一个单独的、最上面的窗口显示。

messageBox:消息框,用于显示你应用程序的消息框。(Python2中为tkMessagebox)

注意在Tkinter中窗口部件类没有分级;所有的窗口部件类在树中都是兄弟关系。

所有这些窗口部件提供了Misc和几何管理方法、配置管理方法和部件自己定义的另外的方法。此外,Toplevel类也提供窗口管理接口。这意味一个典型的窗口部件类提供了大约150种方法。

四、动手实践学习

1. 创建主窗口及Label部件(标签)创建使用

我们要学习使用上面提到的这些控件首先要创建一个主窗口,就像作画一样,先要架好架子和画板,然后才能在上面放画纸和各种绘画元素,创建好主窗口才能在上面放置各种控件元素。而创建过程是很简单的,如下:

示例代码:

测试效果:

045f41978f0cc462342841ee9f6a88cb.png

2. Button窗口部件

简单说明:

Button(按钮)部件是一个标准的Tkinter窗口部件,用来实现各种按钮。按钮能够包含文本或图象,并且你能够将按钮与一个Python函数或方法相关联。当这个按钮被按下时,Tkinter自动调用相关联的函数或方法。

按钮仅能显示一种字体,但是这个文本可以跨行。另外,这个文本中的一个字母可以有下划线,例如标明一个快捷键。默认情况,Tab键用于将焦点移动到一个按钮部件。

什么时候用按钮部件

简言之,按钮部件用来让用户说“马上给我执行这个任务”,通常我们用显示在按钮上的文本或图象来提示。按钮通常用在工具条中或应用程序窗口中,并且用来接收或忽略输入在对话框中的数据。关于按钮和输入的数据的配合,可以参看Checkbutton和Radiobutton部件。

如何创建:

普通的按钮很容易被创建,仅仅指定按钮的内容(文本、位图、图象)和一个当按钮被按下时的回调函数即可:

b = tk.Button(window, text="hit me", command=hit_me)

没有回调函数的按钮是没有用的,当你按下这个按钮时它什么也不做。你可能在开发一个应用程序的时候想实现这种按钮,比如为了不干扰你的beta版的测试者:

b = tk.Button(window, text="Help", command=DISABLED)

示例代码:

测试效果:

68f8a40f7f403e210c6229c22e61a40b.png

e3bd9494efcafca9c25d7d7af983092c.png

3. Entry窗口部件

简单说明:

Entry是tkinter类中提供的的一个单行文本输入域,用来输入显示一行文本,收集键盘输入(类似 HTML 中的 text)。

什么时候用:

需要用户输入用户信息时,比如我们平时使用软件、登录网页时,用户交互界面让我们登录账户信息等时候可以用到。

示例代码:

测试效果:

d8305ef1b925bec3d4e1707fd4f24116.png

4. Text窗口部件

简单说明:

Text是tkinter类中提供的的一个多行文本区域,显示多行文本,可用来收集(或显示)用户输入的文字(类似 HTML 中的 textarea),格式化文本显示,允许你用不同的样式和属性来显示和编辑文本,同时支持内嵌图象和窗口。

什么时候用:

在需要显示编辑用户、产品多行信息时,比如显示用户详细描述文字,产品简介等等,支持随时编辑。

示例代码:

测试效果:

167b34e5428723866caf9df63a0edd5d.png

5. Listbox窗口部件

简单说明:

Text是tkinter类中提供的的列表框部件,显示供选方案的一个列表。listbox能够被配置来得到radiobutton或checklist的行为。

什么时候用:

在有一个很多内容选项组成的列表提供用户选择时会用到。

示例代码:

测试效果:

6306dc1a1aaaa99019e3db2973ccd835.png

6. Radiobutton窗口部件

简单说明:

Radiobutton:代表一个变量,它可以有多个值中的一个。点击它将为这个变量设置值,并且清除与这同一变量相关的其它radiobutton。

什么时候用:

在有一个很多内容选项组成的选项列表提供用户选择时会用到,用户一次只能选择其中一个,不能多选。

示例代码:

测试效果:

c6e81a19bcad349759d4e367a8de44cf.png

f179f872929e747991ebb3bdb21ddfe8.png

7. Checkbutton窗口部件

简单说明:

Checkbutton:代表一个变量,它有两个不同的值。点击这个按钮将会在这两个值间切换,选择和取消选择。

什么时候用:

在有一个很多内容选项组成的选项列表提供用户选择时会用到,用户一次可以选择多个。

示例代码:

测试效果:

66da3936ddb7c63d03f02b045615e4d5.png

2e12d6c66c0f136cd1b7d3468ea76c8b.png

15b70431cb2eab634d249028b3741326.png

8. Scale窗口部件

简单说明:

Scale: 尺度(拉动条),允许你通过滑块来设置一数字值。

什么时候用:

在需要用户给出评价等级,或者给出一个评价分数,或者拉动滑动条提供一个具体的数值等等。

示例代码:

测试效果:

96110e8293b37611149b2dd752adeab3.png

c4787d12d1a4a5b8835e6bb510c9ed59.png

9. Canvas窗口部件

简单说明:

Canvas:画布,提供绘图功能(直线、椭圆、多边形、矩形) 可以包含图形或位图,用来绘制图表和图,创建图形编辑器,实现定制窗口部件。

什么时候用:

在比如像用户交互界面等,需要提供设计的图标、图形、logo等信息是可以用到画布。

示例代码:

所用图片:

当然你可以随意用你的一张图片导入画布试一试效果,图片可以用画图工具改一下像素大小,以免图片太大,导入画布显示不全,当然你也可以用我提供的素材,下面是链接:https://files.cnblogs.com/files/shwee/pic.gif

628886af51a47067b08e29cf7b5679b5.gif

图片锚定点位置参数图:

519226d7df11abb1559deaf25f17bf09.png

测试效果:

53d6828e08435220c9b9437ee0b07d80.png

df316132da92dc4e96f31584486c2297.png

10. Menu窗口部件

简单说明:

Menu:菜单条,用来实现下拉和弹出式菜单,点下菜单后弹出的一个选项列表,用户可以从中选择

什么时候用:

在比如像软件或网页交互界面等,需要提供菜单选项功能提供用户选择菜单选项功能时用到。

示例代码:

测试效果:

0092859bee8e3ab4843587c0e564ac49.gif

11. Frame 窗口部件

简单说明:

Frame:框架,用来承载放置其他GUI元素,就是一个容器,是一个在 Windows 上分离小区域的部件, 它能将 Windows 分成不同的区,然后存放不同的其他部件. 同时一个 Frame 上也能再分成两个 Frame, Frame 可以认为是一种容器.

什么时候用:

在比如像软件或网页交互界面等,有不同的界面逻辑层级和功能区域划分时可以用到,让交互界面逻辑更加清晰。

示例代码:

测试效果:

6808537630c9d3be2f749180c7d8e3d8.png

12. messageBox窗口部件

简单说明:

messageBox:消息框,用于显示你应用程序的消息框。(Python2中为tkMessagebox),其实这里的messageBox就是我们平时看到的弹窗。 我们首先需要定义一个触发功能,来触发这个弹窗,这里我们就放上以前学过的button按钮,通过触发功能,调用messagebox吧,点击button按钮就会弹出提示对话框。下面给出messagebox提示信息的几种形式:

什么时候用:

在比如像软件或网页交互界面等,有不同的界面逻辑层级和功能区域划分时可以用到,让交互界面逻辑更加清晰。

示例代码:

测试效果:

8d703a7a64f7ab96102be60aa4515a66.png

3a11db45f2915434bc44c6d70a35e243.png

b21954f5599fa6fa7b50f92d7ec08ab9.png

b9fce67115862fffad8262c1d5d6da98.png

13. 窗口部件三种放置方式pack/grid/place

参考来源:

grid 是方格, 所以所有的内容会被放在这些规律的方格中。例如:

以上的代码就是创建一个三行三列的表格,其实 grid 就是用表格的形式定位的。这里的参数 row 为行,colum 为列,padx 就是单元格左右间距,pady 就是单元格上下间距,ipadx是单元格内部元素与单元格的左右间距,ipady是单元格内部元素与单元格的上下间距。

示例代码:

测试效果:

6c5db69209e3cea81fd443a8b3123251.png

我们常用的pack(), 他会按照上下左右的方式排列.例如:

示例代码:

测试效果:

f220c9bc2f8147e9d4e396d578a23fbb.png

再接下来我们来看place(), 这个比较容易理解,就是给精确的坐标来定位,如此处给的(50, 100),就是将这个部件放在坐标为(x=50, y=100)的这个位置, 后面的参数 anchor='nw',就是前面所讲的锚定点是西北角。例如:

示例代码:

测试效果:

60ba0a83ec18fbeb62ec7a190a6fcb41.png

14. 综合练习,用户登录窗口例子

编写一个用户登录界面,用户可以登录账户信息,如果账户已经存在,可以直接登录,登录名或者登录密码输入错误会提示,如果账户不存在,提示用户注册,点击注册进去注册页面,输入注册信息,确定后便可以返回登录界面进行登录。

示例代码:

测试效果:

9adda489cd7e42abfb0468010cd410bd.png

4bad44371a7001263fa6e53dfe64c2e8.png

15. 其他部件后续再补充...

注:不同电脑可能配置环境略有不同,如有小错误可以自己调试一下。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来解答你的问题。 在Python,使用tkinter模块可以创建GUI应用程序。要实现子窗口返回数据给主窗口,可以按照以下步骤进行操作: 1. 在主窗口创建一个按钮,当用户点击该按钮时,弹出子窗口。 2. 在子窗口创建需要的控件,比如输入框、下拉框等,让用户输入数据。 3. 在子窗口创建一个“确认”按钮,当用户点击该按钮时,将用户输入的数据传回给主窗口。 4. 在主窗口定义一个函数,用于接收子窗口传回的数据。 5. 在子窗口,使用`tk.Toplevel()`方法创建一个窗口,并将该窗口设置为子窗口。 6. 在子窗口,使用`self.master`来获取主窗口对象,并在子窗口调用主窗口定义的函数,将数据传回给主窗口。 下面是一个示例代码,用于演示如何实现子窗口返回数据给主窗口: ```python import tkinter as tk class SubWindow(tk.Toplevel): def __init__(self, master=None): super().__init__(master) self.master = master tk.Label(self, text="请输入数据:").grid(row=0, column=0) self.entry = tk.Entry(self) self.entry.grid(row=0, column=1) tk.Button(self, text="确认", command=self.submit).grid(row=1, column=0, columnspan=2) def submit(self): data = self.entry.get() self.master.receive_data(data) self.destroy() class MainWindow(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master tk.Button(self, text="打开子窗口", command=self.open_subwindow).pack() self.data_label = tk.Label(self, text="") self.data_label.pack() def open_subwindow(self): SubWindow(self) def receive_data(self, data): self.data_label.config(text=f"你输入的数据是:{data}") if __name__ == "__main__": root = tk.Tk() app = MainWindow(root) app.pack() root.mainloop() ``` 在上面的代码,我们定义了一个`SubWindow`类作为子窗口,该类继承自`tk.Toplevel`。在子窗口,我们创建了一个输入框和一个“确认”按钮,当用户点击“确认”按钮时,将用户输入的数据传回给主窗口。 在主窗口,我们定义了一个`MainWindow`类,该类继承自`tk.Frame`。在该类,我们创建了一个按钮,当用户点击该按钮时,会弹出子窗口。同时,我们还定义了一个`receive_data`函数,用于接收子窗口传回的数据,并将数据显示在标签上。 在主函数,我们创建了一个`Tk`对象,并将`MainWindow`对象添加到该对象。然后启动了主事件循环,等待用户与应用程序进行交互。 希望这个回答能解决你的问题。如果你还有其他问题,可以继续向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值