导航

GPT的tkinter学习之路(1)

Posted on 2024-07-12 19:56  AusarPu  阅读(18)  评论(0编辑  收藏  举报

这是一份文档来记录自己入门python图形化(tkinter)开发的过程(o′┏▽┓`o) just a noob here

本文的学习路径基于GPT,命令GPT充当老师,并给出示例

2024/7/11

Task1:创建主窗口

import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("Tkinter 基础窗口")
root.geometry("400x300")  # 设置窗口大小为400x300像素

# 运行主事件循环
root.mainloop()

Attention:

注意,loop因为是循环的意思,window.mainloop就会让window不断的刷新,如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环

所有的窗口文件都必须有类似的mainloop函数,mainloop是窗口文件的关键的关键。

Task2:添加和管理组件

import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("Tkinter 组件示例")
root.geometry("400x300")

# 创建一个标签
label = tk.Label(root, text="Hello, Tkinter!")
label.pack(pady=10)

# 按钮点击事件的处理函数
def on_button_click():
    label.config(text="Button Clicked!")

# 创建一个按钮
button = tk.Button(root, text="Click Me", command=on_button_click)
button.pack(pady=10)

# 运行主事件循环
root.mainloop()

预期效果:

  • 创建一个标签,在按钮被点击后标签改变

Attention:

  • 按钮的command对应的是函数名称,而不是函数,函数名称不带括号,函数带括号,参见这篇
  • label.config()方法可以动态改变标签内容
 1 def  bracket(data):
 2 
 3     return data
 6 
 7 if __name__ == '__main__':
 8 
 9     # 不带括号调用的结果:<function bracket at 0x0000000004DD0B38>,a是整个函数体,是一个函数对象,不须等该函数执行完成
10 
11     a = bracket
12 
13     print a
14 
15     # 带括号调用的结果:6 ,b是函数执行后返回的值6,须等该函数执行完成的结果
16 
17     b = bracket(6)
18 
19     print b
  • 注意到这里的pack()命令,这是一种布局方法,tkinter提供三种布局,除了pack以外,还有grid和place

Task3:使用 grid 布局

import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("Tkinter Grid 示例")
root.geometry("300x200")

# 创建并放置用户名标签
username_label = tk.Label(root, text="Username:")
username_label.grid(row=0, column=0, padx=10, pady=10)

# 创建并放置用户名输入框
username_entry = tk.Entry(root)
username_entry.grid(row=0, column=1, padx=10, pady=10)

# 创建并放置密码标签
password_label = tk.Label(root, text="Password:")
password_label.grid(row=1, column=0, padx=10, pady=10)

# 创建并放置密码输入框
password_entry = tk.Entry(root, show="*")
password_entry.grid(row=1, column=1, padx=10, pady=10)

# 按钮点击事件的处理函数
def on_login_click():
    print("Username:", username_entry.get())
    print("Password:", password_entry.get())

# 创建并放置登录按钮
login_button = tk.Button(root, text="Login", command=on_login_click)
login_button.grid(row=2, column=0, columnspan=2, pady=10)

# 运行主事件循环
root.mainloop()

预期效果:

  • 格式形如:用户:文本框(用于输入用户名)
  • 输出文本框中的内容

Attention:

  • grid布局将整个窗口看作是一个表格,根据列和行来确定元素的位置 参见这篇
  • 这里有一点需要大家要特别注意,在一个程序中不能同时使用 pack() 和 grid() 方法,这两个方法只能二选一,否则程序会运行错误。

  • 当使用 grid 函数布局的时,其实就是为各个控件指定行号、列号的过程,我们不需要为每个单元格指定大小,因为 grid 会为每个单元格自动设置一个适合的尺寸。