Tkinter 按钮动画

2024-03-01

我一直在使用 tkinter 编写一段简单的 python 3.4 代码。它是 D&D 的骰子滚轮。它有用于所有基本骰子的按钮,还有一个允许您输入骰子面数的按钮。

我的布局方式让我想起了键盘,所以我想我应该添加一些东西,让你可以通过按下按钮来单击按钮。我弄清楚了单击按钮以调用函数的系统,但我不知道如何使按钮动画运行。

有没有办法做到这一点?请帮忙。 谢谢!

from tkinter import *
import tkinter.simpledialog as simpledialog
from random import randint
import os

root = Tk()
root.title("Die Roller")
root.geometry("200x215")
app = Frame(root)
app.grid()

v = StringVar()
w = Label(root, textvariable= v)
w.grid()


print("Results:")


def ad4():
        x = randint(1,4)
        v.set(x)
        print(x)

def ad6():
        x = randint(1,6)
        v.set(x)
        print(x)

def ad8():
        x = randint(1,8)
        v.set(x)
        print(x)

def ad10():
        x = randint(1,10)
        v.set(x)
        print(x)

def ad12():
        x = randint(1,12)
        v.set(x)
        print(x)

def ad20():
        x = randint(1,20)
        v.set(x)
        print(x)

def ad100():
        x = randint(1,100)
        v.set(x)
        print(x)

def other():
        try:
                x = simpledialog.askinteger("Sides", "How many sides are there?")
                y = randint(1, x)
                print(y)
                v.set(y)
        except TypeError:
                cls()

def cls():
    os.system(['clear','cls'][os.name == 'nt'])


d4 = Button(app, text = "d4", command=ad4, height = 2, width = 5, fg="white", bg="blue")
d4.grid(row=0, column=0, padx=10, pady=10)

d6 = Button(app, text = "d6", command=ad6, height = 2, width = 5, fg="white", bg="blue")
d6.grid(row=0, column=1, padx=10, pady=10)

d8 = Button(app, text = "d8", command=ad8, height = 2, width = 5, fg="white", bg="blue")
d8.grid(row=0, column=2, padx=10, pady=10)

d10 = Button(app, text = "d10", command=ad10, height = 2, width = 5, fg="white", bg="blue")
d10.grid(row=1, column=0, padx=10, pady=10)

d12 = Button(app, text = "d12", command=ad12, height = 2, width = 5, fg="white", bg="blue")
d12.grid(row=1, column=1, padx=10, pady=10)

d20 = Button(app, text = "d20", command=ad20, height = 2, width = 5, fg="white", bg="blue")
d20.grid(row=1, column=2, padx=10, pady=10)

d100 = Button(app, text = "d100", command=ad100, height = 2, width = 5, fg="white", bg="blue")
d100.grid(row=2, column=0, padx=10, pady=10)

otherbutton = Button(app, text = "Other", command=other, height = 2, width = 5, fg="white", bg="blue")
otherbutton.grid(row=2, column=1, padx=10, pady=10)

clearButton = Button(app, text = "Clear", command=cls, height =2, width = 5, fg="white", bg="blue")
clearButton.grid(row=2, column=2, padx=10, pady=10)

def onKeyPress(event):
        if event.char == '7':
                ad4()
        if event.char == '8':
                ad6()
        if event.char == '9':
                ad8()
        if event.char == '4':
                ad10()
        if event.char == '5':
                ad12()
        if event.char == '6':
                ad20()
        if event.char == '1':
                ad100()
        if event.char == '2':
                other()
        if event.char == '3':
                cls()


root.bind('<KeyPress>', onKeyPress)
root.mainloop()

下面是一个简短的演示,演示了如何使按钮看起来就像您在按下按钮时按下了它一样。诀窍是改变它的relief参数改为SUNKEN,稍等片刻,然后更改relief回到“提高”。

#!/usr/bin/env python

""" "Animate" a Tkinter button

    Make the button look like it's been pressed when the user
    hits the key associated with the button.

    See http://stackoverflow.com/q/31900552/4014959

    Written by PM 2Ring 2015.08.09
"""

import tkinter as tk

maxbutton = 5
maxkey = str(maxbutton)

def button_cb(ch):
    print('Button ' + ch + ' pressed')

def onKeyPress(event):
    ch = event.char
    if '1' <= ch <= maxkey:
        #Retrieve this button from the dict
        b = buttons[ch]

        #Simulate pushing the button
        b.config(relief=tk.SUNKEN)
        button_cb(ch)

        #Let it pop back up after 200 milliseconds
        b.after(200, lambda: b.config(relief=tk.RAISED))

root = tk.Tk()
root.title("Key / Button Demo")

#A dict to save the buttons in. The dict keys are the button texts.
buttons = {}

#Make some buttons
for i in range(1, maxbutton + 1):
    s = str(i)
    b = tk.Button(root, text=s, command=lambda ch=s: button_cb(ch))
    b.pack(side=tk.LEFT)

    #Save this button in the dict
    buttons[s] = b

root.bind('<KeyPress>', onKeyPress)

root.mainloop()

如果您愿意,您还可以在按下按键时使按钮暂时亮起(就像将鼠标悬停在其上时一样)。为此,您需要切换按钮的state介于“活动”和“正常”之间。
例如,改变
b.config(relief=tk.SUNKEN)
to
b.config(relief=tk.SUNKEN, state=tk.ACTIVE)

并改变
b.after(200, lambda: b.config(relief=tk.RAISED))
to
b.after(200, lambda: b.config(relief=tk.RAISED, state=tk.NORMAL))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tkinter 按钮动画 的相关文章

  • 在 Python 中使用 Selenium 处理“接受 Cookie”弹出窗口

    我一直在尝试用硒抓取这个房地产网站的一些信息 但是 当我访问该网站时 我需要接受 cookie 才能继续 这仅在机器人访问网站时发生 而不是在我手动执行时发生 当我尝试通过 xpath 或 id 查找相应的元素时 正如我在手动检查页面时找到
  • 行未从树视图复制

    该行未在树视图中复制 我在按行并复制并粘贴到未粘贴的任何地方后制作了弹出复制 The code popup tk Menu tree opportunity tearoff 0 def row copy item tree opportun
  • 在python中将文本文件解析为列表

    我对 Python 完全陌生 我正在尝试读取包含单词和数字组合的 txt 文件 我可以很好地读取 txt 文件 但我正在努力将字符串转换为我可以使用的格式 import matplotlib pyplot as plt import num
  • 即使使用 .loc[row_indexer,col_indexer] = value 时也会设置 WithCopyWarning

    这是我的代码中得到的行之一SettingWithCopyWarning value1 Total Population value1 Total Population replace to replace value 4 然后我将其更改为
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • PIL Image.size 返回相反的宽度/高度

    使用PIL确定图像的宽度和高度 在特定图像上 幸运的是只有这一个 但这很麻烦 从 image size 返回的宽度 高度是相反的 图片 http storage googleapis com cookila 533ebf752b9d1f7c
  • Python - 用逗号分割,跳过括号内的内容

    我需要用逗号分隔字符串 但我对这种情况有一个问题 TEXT EXAMPLE THIS IS A EXAMPLE BUT NOT WORKS FOR ME SECOND THIRD 我想拆分并得到 var 0 TEXT EXAMPLE THI
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • 如何更改 div 悬停时的跨度颜色

    我正在尝试更改 div 悬停时跨度的颜色 如何使红色汉堡按钮 即跨度 在 div 悬停时将颜色更改为黑色 PS 现在它在跨度的悬停上执行此操作 JSFiddle https jsfiddle net bjjbqct8 https jsfid
  • 将 Pandas 列中的列表拆分为单独的列

    这是我在 pandas 数据框中的 特征 列 Feature Cricket 82379 Kabaddi 255 Reality 4751 Cricket 15640 Wildlife 730 LiveTV 13 Football 4129
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码

随机推荐

  • 转换 Observable 中的数据

    我正在从我的 Angular 服务上的 Observable 中检索项目列表 在每个项目中 我都有一个包含主题列表的数组 对于每个主题 我都需要再次调用以获取其详细信息 例如名称 描述等 数据结构 post1 subjects books
  • C 是否有通用的“指向指针的指针”类型?

    例如 如果我想编写一个将指针清空的 free 我可以编写如下内容 void myfree void data free data data NULL 但是 当我尝试编写此内容时 我收到编译器警告 来自 gcc 4 6 2 warning p
  • 同步引用完整性表和枚举

    我经常思考这个问题 所以想请教一下大家 假设我有一个如下所示的数据库表 Table Visibility Id Value 0 Visible 1 Invisible 2 Collapsed 这只是一个用于确保引用完整性的表 它基本上是存储
  • 检查其他用户是否有写入文件的权限

    在安装过程中 我需要检查用户提供的路径是否对指定用户可写 执行Setup exe 仅适用于Windows的软件 的用户可能无法写入路径 像 fileserver share这样的UNC路径 所以我认为如何检查写入目录或文件的权限 https
  • 如何根据RSA的公开指数和模生成DER/PEM证书?

    众所周知 公钥由公共指数和模数组成 我的问题是 如何根据RSA的公开指数和模生成DER PEM证书 预先非常感谢您 有了公共指数和模数 您最希望得到的结果是 BEGIN PUBLIC KEY MIGGAoGAfHlcdrcuOK6C02rb
  • NSDictionaryController 似乎没有观察到内容字典的更改

    我一定错过了一些简单的东西 但是我在将 tableView 绑定到 NSDictionaryController 时遇到了一些麻烦 这是我当前方案的模型 TableViewColumn bindsTo gt DictionaryContro
  • cURL 到 C# web 请求

    我正在尝试将 cURL 脚本转换为 C 脚本 如果我想发布图像 是否必须将其转换为字符串 当我尝试运行脚本时 我从目标计算机收到异常 不幸的是 我无权查看目标机器上的代码 ch curl init curl setopt ch CURLOP
  • 在android fb graph api中获取空响应

    我一直在尝试使用fb graph api但是reponse我得到的是null当我尝试在我的 Android 应用程序中获取页面的帖子时 我正在尝试从我使用过的 ID 页面获取页面提要 我希望得到包含提要的图形响应 但我有一个null res
  • matplotlib 中 Poly3DCollection 图的透明度

    我正在尝试使用 Python 的神奇 Matplotlib 包绘制一些对象 这些对象由实现的点组成plt scatter 和补丁实现Poly3DCollection 我希望补丁具有轻微的透明度 以便可以看到补丁后面的点和边缘 这是我已经生成
  • Spring 3 MVC Controller集成测试-将Principal注入到方法中

    作为 Spring 3 MVC 的一部分 可以将当前登录的用户 原理 对象注入到控制器方法中 E g Controller public class MyController RequestMapping value update meth
  • Linux、waitpid、WNOHANG、子进程、僵尸

    我作为守护进程运行我的程序 父进程只等待子进程 当子进程意外死亡时 再次fork并等待 for 1 if fork 0 break int sig 0 for 1 usleep 10000 pid t wpid waitpid g gt p
  • 如何在自定义 XML 序列化方法中使用默认 XML 序列化

    我在 NET 中有一个实现 IXmlSerialized 的类 我想序列化它的属性 但它们可能是复杂的类型 这些复杂类型与 XML 序列化兼容 但它们本身不实现 IXmlSerialized 从我的 ReadXml 和 WriteXml 方
  • Java 小程序未在 Java8/HTTPS 上加载

    我有 Java 小程序 使用 HTTPS 时不会运行 在本地主机上测试时一切正常 此外 使用仅使用 HTTP 的测试服务器一切正常 在服务器仅使用 HTTPS 的生产模式下 会出现此问题 引起我注意的一件事是 http www exampl
  • 具有两个系列的 R ggplot:带有图例的点和误差条

    如果我有一个像这样的数据框 obs lt rnorm 20 d lt data frame year 2000 2019 obs obs pred obs rnorm 20 1 d pup lt d pred 5 d plow lt d p
  • 在 F# 中使用关键字作为标识符

    在 C 中 我可以执行以下操作 int private 15 在 VB NET 中 我可以执行以下操作 Dim Private As Integer 15 我想知道 F 中是否有办法使用保留关键字作为标识符 就像 VB NET 和 C 中那
  • 我应该了解有关 z-index 的任何奇怪规则吗?

    抱歉 我无法发布完整的代码 我正在研究专有的东西 基本上 我遇到一个问题 即 z 索引为 6 的 DIV 被 z 索引为 5 的覆盖 DIV 阻塞 是否有任何情况会导致这种情况发生 我正在绞尽脑汁试图找出为什么会发生这种情况 这根本没有任何
  • 两个字符之间的可变长度子字符串

    数据如下 Initiative Credible Sources Initiative Just in Time Initiative Database Normalization 我希望它看起来像这样 Credible Sources J
  • 如何标记 pandas DataFrame 中的最后一个重复元素

    如你所知 有一种方法 duplicated查找列中的重复项 但我需要的是知道我的数据按日期排序的最后一个重复元素 这是预期的结果Last dup对于列Policy id Id Policy id Start Date Last dup 0
  • IE9,使用 CertEnroll.dll 时自动化服务器无法创建对象错误

    在我的网页中 有一个JS像这样的块 var classFactory new ActiveXObject X509Enrollment CX509EnrollmentWebClassFactory Other initialize Cert
  • Tkinter 按钮动画

    我一直在使用 tkinter 编写一段简单的 python 3 4 代码 它是 D D 的骰子滚轮 它有用于所有基本骰子的按钮 还有一个允许您输入骰子面数的按钮 我的布局方式让我想起了键盘 所以我想我应该添加一些东西 让你可以通过按下按钮来