python的TK库练习

 题目1. 编写程序实现:在画布上显示“张三’,坐标为(0,200)、大小为40、颜色为红色,当每按下窗口左侧控制区域的“移动”按钮时字母向右移动一下,遇到边界停止,移动距离为8,增加一个按下光标右键时,名字向右移动的功能。

代码:

import tkinter as tk

class MyCanvas(tk.Canvas):
    def __init__(self, master, *args, **kwargs):
        super().__init__(master, *args, **kwargs)
        self.name = self.create_text(0, 200, text='张三', font=('Arial', 40), fill='red')
        self.itemconfig(self.name, anchor='w')  #设置锚点为文字左端
        self.configure(bg='black')
        self.width = self.bbox(self.name)[2] - self.bbox(self.name)[0]  #计算名字宽度
        self.move_step = 8  #移动步长
        self.bind('<Button-3>', self.move_right)  #绑定右键事件
        
    def move_right(self, event):
        if self.coords(self.name)[0] + self.width < self.winfo_width():  #判断是否到达窗口右侧边缘
            self.move(self.name, self.move_step, 0)

class MyButton(tk.Button):
    def __init__(self, master, *args, **kwargs):
        super().__init__(master, *args, **kwargs)
        self.configure(bg='white')

class Window(tk.Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title('窗口')
        self.geometry('500x300')
        self.canvas = MyCanvas(self, width=400, height=300) #窗口大小
        self.canvas.pack(side='right')
        button_frame = tk.Frame(self, bg='white')
        button_frame.pack(side='left', fill='y')
        self.move_button = MyButton(button_frame, text='移动', command=self.move_name)
        self.move_button.pack(pady=20)
        MyButton(button_frame, text='key').pack(pady=20)
        MyButton(button_frame, text='mouse').pack(pady=20)
        
    def move_name(self):
        if self.canvas.coords(self.canvas.name)[0] + self.canvas.width < self.canvas.winfo_width():  #判断是否到达窗口右侧边缘
            self.canvas.move(self.canvas.name, self.canvas.move_step, 0)
        
window = Window()
window.mainloop()

代码介绍:

定义了三个类:MyCanvas、MyButton和Window。MyCanvas类继承自tk.Canvas,并在初始化方法中创建了名字文本和设置了颜色和背景色等属性。MyButton类继承自tk.Button,并在初始化方法中设置了白色背景色。Window类继承自tk.Tk,并在初始化方法中创建了一个MyCanvas对象和三个MyButton对象,并且通过bind方法和command参数分别绑定了右键事件和“移动”按钮的点击事件。
在MyCanvas类中,我们定义了一个move_right方法,用于实现名字向右移动的功能。该方法在接收到右键事件时调用,会判断名字是否到达窗口右侧边缘,如果没有,则让名字向右移动一个步长。在Window类中,我们定义了一个move_name方法,用于实现“移动”按钮的点击事件,该方法也会判断名字是否到达窗口右侧边缘,如果没有,则让名字向右移动一个步长。
运行程序后,会出现一个名字为“张三”的红色文本,背景色为黑色的画布和三个白色背景的MyButton按钮。当点击“移动”按钮时,名字将会向右移动一个步长,如果到达窗口右侧边缘,则停止移动。当按下鼠标右键时,名字也会向右移动一个步长。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值