Python tk 按钮command调用其他文件 tkinter按钮执行py文件_代码实现


文章目录

  • 一、前言
  • 二、Button事件
  • 三、Key事件
  • 四、Motion事件
  • 五、结语


一、前言

对于每个组件来说,可以通过bind()方法将函数或方法绑定到具体的事件上,当被触发的事件满足该组件绑定的事件时,Tkinter就会带着事件描述去调用handler()方法。
简单的说,用户触发的鼠标、键盘等操作都可以看成一个事件,而我们可以将这些事件和组件绑定起来,以达到触发事件时,可以和组件交互的作用。
今天介绍三个事件(鼠标左键Button-1,键盘Key,鼠标运动轨迹Motion),并制作两个简单的小游戏,当有事件被触发时,组件会发生相应的改变。

二、Button事件

代码实现:

from tkinter import *
root = Tk()

def callback(event):
    print("点击坐标",event.x,event.y)

frame = Frame(root,width = 300,height = 300) #创建一个Frame
frame.bind("<Button-1>",callback)  #将鼠标左键事件与Frame绑定
frame.pack()

mainloop()

运行

Python tk 按钮command调用其他文件 tkinter按钮执行py文件_python_02


可以看到,当鼠标移动到Frame范围内,单击左键,事件触发,坐标被打印出来。

三、Key事件

代码实现:

from tkinter import *

root = Tk()
def callback(event):
    print("按键位置:",event.char)
    if(event.char == 'x'):
        print("按对啦!")
        var.set("按对啦!")
    else:
        print("按错啦,要按x键!")
        var.set("按错啦,要按x键")
        
var = Variable()
var.set("请按下x键")
frame = Frame(root,width = 200,height = 200)
Label(root,textvariable = var,bg = "green").pack()
frame.bind("<Key>",callback)
frame.focus_set()   
frame.pack()

mainloop()

运行:

Python tk 按钮command调用其他文件 tkinter按钮执行py文件_python_03


当我们按下x键时,提示按对了,如果按其他键,则会提示我们按错了,需要重新按。

四、Motion事件

代码实现:

from tkinter import *

root = Tk()
def callback(event):
    print("鼠标位置:",event.x,event.y)
    var.set("鼠标放这里吧~")
    location = ('鼠标位置:',event.x,event.y)
    var2.set(location)
    print(var2.get())

def callback2(event):
    print("鼠标位置:",event.x,event.y)
    var.set("放稳了,不要划出去了~")
    location = ['鼠标位置:',event.x,event.y]
    var2.set(location)
    print(var2.get())

def callback3(event):
    print("鼠标位置:",event.x,event.y)
    var.set("鼠标放这里吧~")
    var2.set("放其他地方去,我是用来显示坐标的~")
var = Variable()
var2 = StringVar()
var.set("鼠标放这试试")
var2.set("鼠标位置:未知")
frame = Frame(root,width = 300,height = 300,bg = "green")
frame.bind("<Motion>",callback)
frame.pack()
label = Label(root,textvariable = var,bg = "red",width = 42)
label.bind("<Motion>",callback2)
label.pack()
label_location = Label(root,textvariable = var2,bg = "yellow",width = 42)
label_location.bind("<Motion>",callback3)
label_location.pack()
mainloop()

运行:

鼠标放在绿色区域时:

Python tk 按钮command调用其他文件 tkinter按钮执行py文件_python_04


鼠标放在红色区域时:

Python tk 按钮command调用其他文件 tkinter按钮执行py文件_编程语言_05


鼠标放在黄色区域时:

Python tk 按钮command调用其他文件 tkinter按钮执行py文件_物联网_06


可以看到,当我们将鼠标移动到绿色、红色和黄色区域时,Label标签会给我们不同的显示。

五、结语

1、Button事件一共有几种,其中Button-1是鼠标左键触发,Button-2是鼠标中键,button-3是鼠标右键,button-4滚轮上滚(Linux),button-5滚轮下滚(Linux)。

2、只有当组件获得焦点的时候才能接收键盘事件Key,所以使用focus_set()获得焦点,可以设置Frame的takefocus选项为True,然后使用Tab将焦点转移上来。

3、当需要var.set()一个字符串时,可以将它组成一个元组或者列表,然后set进去。