python之tkinter界面编程_booleanvar_技术爱好者Joker的博客-程序员宅基地

技术标签: tkinter  python  

  • Button
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+200+50")


def func():
    print('one')


button1 = tkinter.Button(win, text="one", command=func, width=10, height=10)
button1.pack()

button2 = tkinter.Button(win, text="two", command=lambda: print('bb'))
button2.pack()

button3 = tkinter.Button(win, text="退出", command=win.quit)
button3.pack()

win.mainloop()
  • CheckButton
# -*- coding: UTF-8 -*-
import tkinter
import hashlib

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

ho1 = tkinter.BooleanVar()
ho2 = tkinter.BooleanVar()
ho3 = tkinter.BooleanVar()

def update():
    message = ''
    if ho1.get():
        message += "money\n"
    if ho2.get():
        message += "power\n"
    if ho3.get():
        message += "people\n"

    contents = text.get(1.0, tkinter.END)

    text.delete(0.0, tkinter.END)
    text.insert(tkinter.INSERT, message)


check1 = tkinter.Checkbutton(win, text='money', variable=ho1, command=update)
check1.pack()

check2 = tkinter.Checkbutton(win, text='power', variable=ho2, command=update)
check2.pack()

check3 = tkinter.Checkbutton(win, text='people', variable=ho3, command=update)
check3.pack()

text = tkinter.Text(win, width=50, height=5)
text.pack()

win.mainloop()
  • Combobox
# -*- coding: UTF-8 -*-
import tkinter
from tkinter import ttk

win = tkinter.Tk()
win.title('这是窗口')
win.geometry('400x400+1200+50')

cv = tkinter.StringVar()

com = ttk.Combobox(win, textvariable=cv)
com.pack()

com['value'] = ("黑龙江", "吉林", "辽宁")
com.set('吉林')


def func(event):
    print(com.get())
    print(cv.get())


com.bind("<<ComboboxSelected>>", func)

win.mainloop()
  • Entry
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+200+50")


def func():
    print('one')


# 绑定变量
e = tkinter.Variable()

# show="*" 可以表示输入密码
entry1 = tkinter.Entry(win, show="*", textvariable=e)
entry1.pack()

e.set("hello")

# 回车键
entry1.bind('<Key-Return>', lambda event: print(e.get()))

win.mainloop()
  • Frame
# -*- coding: UTF-8 -*-
import tkinter
import hashlib

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

frm = tkinter.Frame(win)
frm.pack()

# left
frm_l = tkinter.Frame(frm)
tkinter.Label(frm_l, text="左上", bg="pink").pack(side=tkinter.TOP)
tkinter.Label(frm_l, text="左下", bg="blue").pack(side=tkinter.TOP)
frm_l.pack(side=tkinter.LEFT)

# right
frm_r = tkinter.Frame(frm)
tkinter.Label(frm_r, text="右上", bg="green").pack(side=tkinter.TOP)
tkinter.Label(frm_r, text="右下", bg="red").pack(side=tkinter.TOP)
frm_r.pack(side=tkinter.RIGHT)

win.mainloop()


  • Label
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+200+50")


# win:父窗体
# text:显示的文本内容
# bg:背景色
# fg:字体颜色
# font:字体
# wraplength:指定text文本中多宽之后换行
# justify:设置换行后的对齐方式
# anchor:位置 n北,e东,w西,s南,center居中;还可以写在一起:ne东北方向
label = tkinter.Label(
    win,
    text="this is a word",
    bg="pink", fg="red",
    font=("黑体", 20),
    width=20,
    height=10,
    wraplength=100,
    justify="left",
    anchor="ne")

label.pack()

win.mainloop()
  • Listbox
# -*- coding: UTF-8 -*-
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

# tkinter.SINGLE, tkinter.BROWSE, tkinter.MULTIPLE多选
# tkinter.EXTENDED: 可以使listbox支持shift和Ctrl
lb = tkinter.Listbox(win, selectmode=tkinter.EXTENDED)
lb.pack()

for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
    lb.insert(tkinter.END, item)

lb.insert(tkinter.ACTIVE, "cool")

lb.delete(1, 3)

lb.select_set(2, 3)

lb.select_clear(2)

print(lb.size())

print(lb.get(2, 3))

# 返回当前的索引项,不是item元素
print(lb.curselection())

# 判断:一个选项是否被选中
print(lb.selection_includes(3))


def myprintfn(event):
    # 返回下标
    # print(lb.curselection())

    # 返回值
    print(lb.get(lb.curselection()))

# <Button-1>:鼠标左击事件
# <Button-2>:鼠标中击事件
# <Button-3>:鼠标右击事件
# <Double-Button-1>:双击事件
# <Triple-Button-1>:三击事件

# <B1-Motion>  左键移动
# <B2-Motion>  中键移动
# <B3-Motion>  右键移动

# <ButtonRelease-1> 释放鼠标左键
# <ButtonRelease-2> 释放鼠标中键
# <ButtonRelease-3> 释放鼠标右键

# <Enter>  当鼠标进入控件时触发事件
# <Leave>  当鼠标离开控件时触发事件

# <Key>  响应所有的按键(要有焦点)

# <Shift_L>  只响应左侧的shift键
# <Shift_R>
# <F5>
# <Return>  也就是回车键
# <BackSpace>  返回,也就是退格键

# <Control-Alt-a> 组合
# <Shift-Up>


lb.bind("<Double-Button-1>", myprintfn)

win.mainloop()
  • Menu
# -*- coding: UTF-8 -*-
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

# 菜单条
menubar = tkinter.Menu(win)
win.config(menu=menubar)

menubar2 = tkinter.Menu(win)

# 创建一个菜单选项
menu1 = tkinter.Menu(menubar, tearoff=False)
menu2 = tkinter.Menu(menubar, tearoff=False)

# 给菜单选项添加内容
for item in ['python', 'c', 'java', 'c++', 'c#', 'php', 'B', '退出']:
    if item == '退出':
        menu1.add_separator()
        menu1.add_command(label=item, command=win.quit)

        menu2.add_separator()
        menu2.add_command(label=item, command=win.quit)
    else:
        menu1.add_command(label=item, command=lambda: print('menu1'))
        menu2.add_command(label=item, command=lambda: print('menu2'))

# 向菜单条上添加菜单选项
menubar.add_cascade(label='语言', menu=menu1)
menubar2.add_cascade(label="language", menu=menu2)

def showMenu(event):
    menubar2.post(event.x_root, event.y_root)


win.bind("<Double-Button-1>", showMenu)

win.mainloop()
  • Radiobutton
# -*- coding: UTF-8 -*-
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")


def update():
    print(r.get())


r = tkinter.IntVar()
radio1 = tkinter.Radiobutton(win, text="radio1", value=1, variable=r, command=update)
radio1.pack()

radio2 = tkinter.Radiobutton(win, text="two", value=2, variable=r, command=update)
radio2.pack()

win.mainloop()
  • Scale
# -*- coding: UTF-8 -*-
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

scale1 = tkinter.Scale(win, label="scale1", activebackground="#888", background="green", from_=0, to=100,
                       orient=tkinter.HORIZONTAL, tickinterval=20, length=200)
scale1.pack()

scale1.set(20)


def shownum():
    print(scale1.get())


tkinter.Button(win, text="按钮", command=shownum).pack()

win.mainloop()
  • Scrollbar
# -*- coding: UTF-8 -*-
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

scroll = tkinter.Scrollbar()
text = tkinter.Text(win, width=30, height=10, fg='#fff')
# side放到窗体的哪一侧,  fill填充
scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y, pady=50, padx=20, ipadx=20, ipady=30)
text.pack(side=tkinter.LEFT, fill=tkinter.Y)


# 关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set, background='#888', borderwidth=10)

text.pack()

str1 = '''盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。譬于大数,若到戌会之终,则天地昏蒙而万物否矣。再去五千四百岁,交亥会之初,则当黑暗,而两间人物俱无矣,故曰混沌。又五千四百岁,亥会将终,贞下起元,近子之会,而复逐渐开明。邵康节曰:“冬至子之半,天心无改移。一阳初动处,万物未生时。”到此,天始有根。再五千四百岁,正当子会,轻清上腾,有日,有月,有星,有辰。日、月、星、辰,谓之四象。故曰,天开于子。又经五千四百岁,子会将终,近丑之会,而逐渐坚实。易曰:“大哉乾元!至哉坤元!万物资生,乃顺承天。”至此,地始凝结。再五千四百岁,正当丑会,重浊下凝,有水,有火,有山,有石,有土。水、火、山、石、土谓之五形。故曰,地辟于丑。又经五千四百岁,丑会终而寅会之初,发生万物。'''

text.insert(tkinter.INSERT, str1)

print(text.widgetName)
win.mainloop()
  • Spinbox
# -*- coding: UTF-8 -*-
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

v = tkinter.StringVar()


def updata():
    print(v.get())


sp = tkinter.Spinbox(win, from_=0, to=100, increment=5, textvariable=v, command=updata)
sp.pack()
v.set(20)
print(v.get())

win.mainloop()
  • Text
import tkinter

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+200+50")


text = tkinter.Text(win, width=30, height=10)
text.pack()

str1 = 'this is string character'

text.insert(tkinter.INSERT, str1)


win.mainloop()
  • Treeview
# -*- coding: UTF-8 -*-
import tkinter
from tkinter import ttk

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

tree = ttk.Treeview(win, columns=["0", "1", "2", "3"], show='headings')
tree.pack()

# 设置列,列还不显示
tree.column("0", width=100, anchor="center")
tree.column("1", width=100, anchor="center")
tree.column("2", width=100, anchor="center")
tree.column("3", width=100, anchor="center")

# 设置表头
tree.heading("0", text="姓名")
tree.heading("1", text="年龄")
tree.heading("2", text="身高")
tree.heading("3", text="体重")

# 添加数据
tree.insert("", 0, text="line1", values=("小郑", "34", "177cm", "70kg"))
tree.insert("", 1, text="line2", values=("小张", "43", "188cm", "90kg"))
tree.insert("", 3, text="line2", values=("小黄", "53", "180cm", "70kg"))
tree.insert("", 2, text="line2", values=("小8", "53", "180cm", "70kg"))


def treeViewClick(event):
    print(tree.selection())
    for item in tree.selection():
        item_text = tree.item(item, "values")
        # 输出所选行的第一列的值
        print(item_text[0])


tree.bind('<ButtonRelease-1>', treeViewClick)

a = {'name': (8, 5)}

print(a['name'])

tree2 = ttk.Treeview(win)
tree2.pack()

treeF1 = tree2.insert("", 0, "福建", text="福建", values=("F1",))
treeF2 = tree2.insert("", 0, "浙江", text="浙江", values=("F2",))
treeF3 = tree2.insert("", 0, "四川", text="四川", values=("F3",))


treeF1_1 = tree2.insert(treeF1, 0, '泉州', text="福建泉州", values=('F1_1',))
treeF1_2 = tree2.insert(treeF1, 1, '厦门', text="福建厦门", values=('F1_2',))
treeF1_3 = tree2.insert(treeF1, 2, '福州', text="福建福州", values=('F1_3',))

treeF2_1 = tree2.insert(treeF2, 0, '杭州', text="浙江杭州", values=('F2_1',))
treeF3_1 = tree2.insert(treeF3, 0, '成都', text="四川成都", values=('F3_1',))

win.mainloop()
  • 布局
# -*- coding: UTF-8 -*-
import tkinter
from tkinter import ttk

win = tkinter.Tk()
# 设置标题
win.title("窗口")
# 设置大小和位置
win.geometry("400x400+1200+50")

label1 = tkinter.Label(win, text="good", bg="blue", fg="white")
label2 = tkinter.Label(win, text="nice", bg="red", fg="white")
label3 = tkinter.Label(win, text="cool", bg="green", fg="white")
#
label4 = tkinter.Label(win, text="yellow", bg="yellow", fg="black")

# 绝对布局,窗口的变化对位置没有影响
label1.place(x=10, y=10)
label2.place(x=50, y=50)
label3.place(x=100, y=100)

# 相对布局,窗体改变对控件有影响
label4.pack(fill=tkinter.NONE, side=tkinter.RIGHT)
# label4.pack()


bottom = tkinter.Frame(win)
bottom.pack(side='bottom')

# 表格布局
label5 = tkinter.Label(bottom, text="good", bg="blue", fg="white")
label6 = tkinter.Label(bottom, text="nice", bg="red", fg="white")
label7 = tkinter.Label(bottom, text="cool", bg="green", fg="white")
label8 = tkinter.Label(bottom, text="a", bg="green", fg="white")

label5.grid(row=0, column=0)
label6.grid(row=0, column=1)
label7.grid(row=1, column=0)
label8.grid(row=1, column=1)


win.mainloop()

 

 

 

出处:https://www.jianshu.com/p/c9fb28367015

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38874840/article/details/102504344

智能推荐

如何「优雅」地标数据_AI小男孩的博客-程序员宅基地

最近想做一个识别验证码的程序。目标其实很简单,就是识别出某网站验证码的字母和数字。这种类型的验证码已经被做烂了,相应的破解程序也很多。但我只是想学习消遣一下。

QCustomPlot实现图例置于底部_缘如风的博客-程序员宅基地

简介:QCustomPlot是一个小型的Qt画图表的类。只需要包含.h和.cpp文件即可。支持曲线和柱状图等,具体查看官方文档。http://www.qcustomplot.com/。此例是实现图例位置的置于底部(此例是基于2.0.0版本)。查看相关Layouts帮助说明。默认是按照一行一列的方式添加的item。只要更改item的布局方式即可效果如下实现代码如下void C...

ce教程龙头人修改_龙头游戏修改-程序员宅基地

龙头人修改:龙头人的金币公式是*2+1打开 CE修改器点左上角电脑小图标,找到你要修改的程序打开游戏,比如现有金钱100,就搜201(既金币数*2+1) 点击首次搜索,这样左侧会出现几个地址然后在游戏中购买一个物品,让金币减少,接下来再次搜索现有金币数*2+1,点击再次搜索(next scan)双击那个数据,那个数据就到下面去了,可以通过右键 change value然后进行(你想要..._龙头游戏修改

C语言实验十二 指针(二)_Meteor.792的博客-程序员宅基地

注通过该题,希望学生掌握数组元素与指向数组的指针的不同。a[k]、p[k]、*(p+k)、*(a+k)都表示a[k];5、编写程序实现如下功能通过键盘,用指针输入10个元素的值,再通过指针计算各元素的平均值,输出平均值。/*将数组a的首地址送给指针变量p*/(一)进一步理解指针的概念,掌握其在数组和字符串中的应用。3、以下程序是用指针变量输出a数组中的10个元素。(二)学会使用函数的指针和指向函数的指针变量。4.下面程序的功能是输出a数组中的10个元素。(三)了解指向指针的指针的概念及其使用方法。...

随便推点

Linux 0.11内核编译和bochs上的实验环境的搭建_ztguang的博客-程序员宅基地

http://menglee.iteye.com/blog/1100887 最近决定开始阅读Linux 0.11的源代码。 学习Linux操作系统的核心概念最好的方法莫过于阅读源代码。而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难。而Linux早期的0.11版本虽然有诸多局限,但是具备了现代操作系统的完备功能,一些基本概念沿用到了当前版本,

微信小程序提交订单支付_输入名字和电话号码提交订单的小程序图片_xlm1998的博客-程序员宅基地

主要是前端支付的几个部分**1.首先我们需要登录 **通过wx.login这个api获取到code值,获取到code值后, 我们请求登录的url并且把获取到的code拼接到url上,后台接收code值,登录成功后,返回openid,然后我们把获取到的openid存取到app.globalData里面2.我们支付点击按钮自己定义了一个方法pay()在方法里获取存在app.globalData里的openid 然后通过支付的接口把openid传到后台 返回参数res 然后我们请求wx.request_输入名字和电话号码提交订单的小程序图片

java jar debug日志_java-调试日志记录在Spring Boot 2.0.3中导致Sta..._一北玄冥的博客-程序员宅基地

我最近将Spring Boot应用程序从1.5.10升级到了2.0.3,现在正面临这个问题:当我将logging.level.root = DEBUG添加到application.properties时,出现以下异常:log4j:WARN No appenders could be found for logger (org.springframework.web.context.support...._org.apache.juli.logging.directjdklog:180

vue中在elementUI中报NavigationDuplicated: Avoided redundant navigation to current location_element-ui.common.js:4656 navigationduplicated: av_火红_的博客-程序员宅基地

// 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题const originalPush = VueRouter.prototype.pushVueRouter.prototype.push = function push (location) { return originalPush.call(this, location).catch(err => err)}..._element-ui.common.js:4656 navigationduplicated: avoided redundant navigation

spark 2.1.1安装(hadoop 2.6.0)_波波happy的博客-程序员宅基地

 spark分布式搭建方式大致分为三种:standalone、yarn、mesos。三种分类的区别这里就不一一介绍了,不明白可自行了解。standalone是官方提供的一种集群方式,企业一般不使用。yarn集群方式在企业中应用是比较广泛的,这里也是介绍yarn的集群安装方式。mesos安装适合于超大型集群。...

推荐文章

热门文章

相关标签