文章目录

  • tkinter大部分组件
  • tkinter界面
  • grid控制调整界面得布局
  • 内容
  • 文本框、输入框
  • 复选框、按钮
  • 单选框
  • 复选框
  • 独立消息框
  • 进度条
  • frame控件——实现层次关系
  • 分析与总结
  • 借鉴


tkinter大部分组件

python tkinter 窗口缩放 tkinter调整按钮位置_python tkinter 窗口缩放


(参考tkinter-grid布局详解)

  • 布局类
  • pack:控件类填充,一般是填充整个控件
  • grid:以网格的方式进行设置控件的位置
  • place:设置控件的位置,以坐标的方式进行
  • 部件类
  • Button:按钮,可以连接到对应的事件
  • Canvas:画布,显示图形元素和文本
  • Checkbutton:复选框
  • Entry:输入控件,用于显示简单的文本内容
  • Frame:框架,一个tk对象中可以有不同的fram组成
  • Label:显示文本或者是位图
  • Listbox:列表框控件,显示一个字符序列表给用户
  • Menu:显式菜单栏,下拉菜单和弹出菜单
  • Menubutton:隐式菜单栏,由于显示菜单项
  • Message:消息组件,用来显示多行文本,是以独立出来的框显示的信息
  • Radiobutton:单选按钮空间,显示一个单选的按钮状态
  • Scale:范围控件,显示一个数值刻度,为输出限定范围的数字区间
  • Scrollbar:滚动条控件,当内容超过可视化区域时使用,如列表框
  • Text:用来显示多行文本,文本控件
  • Spinbox:整数调节框
  • LabelFrame:标签框架
  • PanedWindow:窗口布局管理的组件,可以包含一个或者多个子空间
  • Progressbar(进度条)
  • 这部分内容参考python tkinter 全部组件(widget)及事件类型(event)一览,这个网站有所有的样例,图示,可以直接看一下具体的执行效果,到底是什么样的。
  • 这里可能有一部分没有提到,还是建议参考这个大佬的文章,大部分的函数都有,而且还有中文的参数说明文档。传送门
tkinter界面
grid控制调整界面得布局

python tkinter 窗口缩放 tkinter调整按钮位置_python tkinter 窗口缩放_02

内容
文本框、输入框
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import *
from tkinter.ttk import Progressbar

# 实体化tkinter对象
window = Tk()
window.title("Price Show")
window.geometry('300x500')

# 在window窗口上放置对应窗口控件
########################################
# 显示文本的隐形文本框
########################################
# 文本,显示用户的信息
lbl = Label(window,text = "hello")
lbl.grid(column = 1,row = 0)

########################################
# 获取用户输入的方形文本框
########################################
# 输入框,获取用户的输入
txt = Entry(window,width = 10)
txt.grid(column =1,row = 1)
# 自动设置焦点,每一次点击到界面自动运行到对应窗口中
txt.focus()
复选框、按钮
########################################
# 多个选项用户给用户下拉选择
########################################
# 添加组合框,复选框
combo = Combobox(window)
combo['values'] = (1,2,3,4,5,'Text')
# current是当前默认显示出来的选项
combo.current(1)
# 通过get函数获取用户的输入
a = combo.get()
combo.grid(column = 1,row = 2)

########################################
# 复选框进行实现
########################################
# 添加复选框,也就是多选题
# 对复选框的值进行初始化,默认刚出现时为true,被选中
chk_state = BooleanVar()
chk_state.set(True)
# 显示出对应复选框中的值
chk = Checkbutton(window,text = "Choose",var = chk_state)
chk.grid(column = 1,row = 3)

########################################
# 按钮
########################################
# 按钮设置
def clicked():
    # 控制文本框的内容显示
    res = "welcome to " + txt.get()+str(a)
    lbl.configure(text = res)
# 注意,这里的command指令,不能加括号的,加括号会默认调用
btn = Button(window,text = "clicked me",command = clicked)
btn.grid(column = 1,row = 4)
单选框
########################################
# 单选框获取用户的输入
########################################
# 添加单选框中值
# 获取用户的输入
# 变量的类型,并指定在各个选项中
selected = IntVar()
lbl_radioChoice = Label(window,text = "show value")
复选框
# 实体化选项
rad1 = Radiobutton(window,text = "First",value = 1,variable = selected)
rad2 = Radiobutton(window,text = "Second",value = 2,variable = selected)
rad3 = Radiobutton(window,text = "Third",value = 3,variable = selected)
rad1.grid(column = 1,row = 5)
rad2.grid(column = 2,row = 5)
rad3.grid(column = 3,row = 5)
# 通过get函数获得对应的生成的值
radio_choice_value = selected.get()
独立消息框
########################################
# 消息框突出显示用户的信息
########################################
def click_message():
    messagebox.showinfo("Message title", "Message content")
message_btn = Button(window,text='show message text',command = click_message)
message_btn.grid(column = 0,row = 7)
进度条
########################################
# 显示进度条
########################################
bar = Progressbar(window,length = 200)
bar['value'] = 10
bar.grid(column = 0,row = 8)
def change_bar():
    for i in range(101):
        bar['value'] = i
        bar.grid(column = 0,row = 8)
btn2 = Button(window,text = 'test progressbar',command = change_bar)
btn2.grid(column = 1,row = 11)
# 开始循环展示窗口,获取用户的输入
window.mainloop()
frame控件——实现层次关系
import tkinter
 
 
win = tkinter.Tk()
win.title("Kahn Software v1")    # #窗口标题
win.geometry("500x300+200+20")   # #窗口位置500后面是字母x
 
'''
框架控件,作用:作为一种容器,可以把其他空间放在frame上。
'''
frm = tkinter.Frame(win)             # #创建一个frame控件
frm.pack()
 
# #左侧
frm_1 = tkinter.Frame(frm)             # #创建一个frm_1并且放到frm上
tkinter.Label(frm_1, text="左上", bg="pink").pack(side=tkinter.TOP)    # #创建一个Lable放到frm_1上
tkinter.Label(frm_1, text="左下", bg="green").pack(side=tkinter.TOP)
frm_1.pack(side=tkinter.LEFT)         # #frm_1的位置放在左侧
 
# #右侧
frm_r = tkinter.Frame(frm)
tkinter.Label(frm_r, text="右上", bg="red").pack(side=tkinter.TOP)
tkinter.Label(frm_r, text="右下", bg="yellow").pack(side=tkinter.TOP)
frm_r.pack(side=tkinter.RIGHT)
 
win.mainloop()   # #窗口持久化
  • 这个工具还是很好用的,之前因为同一个容器之内不能同时使用pack和grid两种布局,给我整的挺无语的,一时间都不知道怎么用,现在知道了。我觉得自己学东西之前还是有一点问题的,应该花时间去了解一下所有组件的功能,不然就浪费了很多时间,要不是机缘巧合遇到这个组件,我估计都想放弃了。
分析与总结
  • 用了才发现要实现很好看的特效的话,就不能使用这个。不是很好用,不建议使用的。在就拿控制布局的三种方式来说,grid是很简单,但是很死,而且你要是设置背景图片就不能用grid,网上找了半天都没有找到,可能不是很好用吧。还有两种就是pack和place。其中pack的排列方式不是很好用,你用pack设置了背景,在想用pack设置部件不行。用place又要花很多时间,所以不建议用。只是想做一个比较简单得,不要求什么美工啊,这个还是可以的。所以认命吧。
  • 好吧,最终还是折服了,去找了一个人家已经写得差不多了的,真不知道是谁给我的勇气,让我自己重头写一个这样一个项目。只能在人家写好的基础上进行修改了。
  • 自己的技术栈确实很差劲,这样下去逃不掉自己被优化的命运,所以就要多去跑跑别人的项目,然后不要老是写csdn,自己在学习别人的项目的时候,要能够写出来自己的项目,不断丰富自己的github。现在就只能先把手里这个项目先应付过去。
借鉴
  • python GUI Examples
  • python Tkinter Grid布局管理器详解
  • Python笔记之Tkinter(Frame控件容器)
  • tkinter-grid布局详解
  • python tkinter 全部组件(widget)及事件类型(event)一览
  • python3内置的tkinter参数释疑