用tkinter做一个简单的小页面
一、实现效果
二、主页面
2.1主页面框架
from tkinter import *
import tkinter as tk
import os
class Mian:
def __init__(self):
root = Tk()
root.title(
'--xx小程序 ')
# 400和150为页面的长和宽,50和100为页面打开在电脑桌面的哪个位置
root.geometry("400x150+50+100")
# 背景颜色
root["background"] = "#C9C9C9"
# 中间写功能
root.mainloop()
if __name__ == '__main__':
Mian()
把这个框架搭起来,就可以运行出一个窗口,接下来可以在中间加入按钮之类的。
2.2 调用子页面
from tkinter import *
import tkinter as tk
# 引入子页面
import try_son
class Mian:
def __init__(self):
root = Tk()
root.title(
'--xx小程序 ')
# 500和350为页面的长和宽,50和100为页面打开在电脑桌面的哪个位置
root.geometry("400x150+50+100")
# 背景颜色
root["background"] = "#C9C9C9"
# 中间写功能
# 调用子页面的方法
def SON():
try_son.Find()
# 使用按钮控件调用函数
button = tk.Button(root, text="点击打开子页面", font=('微软雅黑', '15', 'bold'),
fg='#525D71', bg='#A7CBDC', command=SON)
# 放置按钮
button.place(x=50, y=100, width=300, height=40)
root.mainloop()
if __name__ == '__main__':
Mian()
点击button打开子页面,这里通过command=SON绑定上面的方法。
三、子页面
- 子页面框架与主页面基本相同
3.1 文本标签和输入框
# 新建文本标签
labe1 = tk.Label(root, text="学号:", width=20,
height=2, bg='#C9C9C9').grid(row=0)
labe2 = tk.Label(root, text="姓名:", width=20,
height=2, bg='#C9C9C9').grid(row=1)
# 为上面的文本标签,创建两个输入框控件,放在文本标签的后面
id = tk.Entry(root, textvariable=StringVar())
name = tk.Entry(root, textvariable=StringVar())
id.grid(row=0, column=1)
name.grid(row=1, column=1)
-
注意这里的输入框的位置设置,不能向文本标签那样设置在一起,不能携程id=id = tk.Entry(root, textvariable=StringVar()).grid(row=0, column=1),会报错
-
会报错AttributeError: ‘NoneType’ object has no attribute ‘get’,这是因为后面我们要获取id里面输入的数据,而.grid()是个方法,不能回调出数据
3.2 提交事件
# 提交事件
def add():
# 获取变量
b_id = id.get()
b_name = name.get()
text.insert(INSERT, b_id+'学号为'+b_name)
# 跳出提示
tk.messagebox.showinfo('提示', '提交成功!')
# 添加提交按钮,为button绑定add事件
submit = tk.Button(root, text="提交", command=add).grid(row=2, column=1)
# 设置一个文本框,用来显示得到的数据
text = Text(root, width=30, height=5, undo=True, autoseparators=False)
text.grid(row=3, column=1)
- 如果上面位置合在一起写了,就是这里的b_id = id.get()获取数据会报错
3.3 子页面整体代码
from tkinter import *
import tkinter as tk
import tkinter.messagebox
class Find:
def __init__(self):
root = Tk() # 创建窗口对象的背景色
root.title(
'--xxx子页面')
root.geometry("400x200+200+50")
root["background"] = "#C9C9C9"
# 新建文本标签
labe1 = tk.Label(root, text="学号:", width=20,
height=2, bg='#C9C9C9').grid(row=0)
labe2 = tk.Label(root, text="姓名:", width=20,
height=2, bg='#C9C9C9').grid(row=1)
# 为上面的文本标签,创建两个输入框控件,放在文本标签的后面
id = tk.Entry(root, textvariable=StringVar())
name = tk.Entry(root, textvariable=StringVar())
# 位置设置,不能和上面的输入框写在一起,会报错
# 会显示AttributeError: 'NoneType' object has no attribute 'get',这是因为.grid()是个方法,不能回调出数据
id.grid(row=0, column=1)
name.grid(row=1, column=1)
# 提交事件
def add():
# 获取变量
b_id = id.get()
b_name = name.get()
text.insert(INSERT, b_id+'学号为'+b_name)
# 跳出提示
tk.messagebox.showinfo('提示', '提交成功!')
# 添加提交按钮,为button绑定add事件
submit = tk.Button(root, text="提交", command=add).grid(row=2, column=1)
# 设置一个文本框,用来显示得到的数据
text = Text(root, width=30, height=5, undo=True, autoseparators=False)
text.grid(row=3, column=1)
root.mainloop()
if __name__ == '__main__':
Find()
四、其他
-
我在学习用tkinter时,主要参考了网站 Tkinter是什么 (biancheng.net)
这个网站里面对于各种控件的描述比较清晰。
- 但是tkinter这个库不是那么全面,很多东西实现起来很麻烦,所以我后期改用了pyqt5,大家开始做界面之前,可以先查一查这个库是否能满足你想要达到的成果再下手哦