如何将多个按钮链接到 tkinter 中的一个文本小部件?

阿雷克

我正在尝试学习 tkinter,我想编写一个简单的石头剪刀布游戏,其中有一个带有 3 个按钮和一个文本小部件的窗口。

我希望能够按下任何按钮并使消息显示在文本字段中,然后单击不同的按钮,文本字段清除并显示与第二个按钮关联的新消息,依此类推。

从我看过的教程中,我知道我可以将函数外壳文本小部件作为按钮命令参数中的参数传递。我知道我可以使用文本字段创建 3 个函数,每个按钮一个(一次显示一个)但这可能不是正确的方法。这是我到目前为止所拥有的:

import tkinter as tk

root = tk.Tk()
root.title("Rock Paper Scissors")
root.geometry("420x200")

def Rock():
    rockText = "Paper!"
    return rockText

def Paper():
    paperText = "Scissors!"
    return paperText

def Scissors():
    scissorsText = "Rock!"
    return scissorsText

def display():

    textDisplay = tk.Text(master = root, height = 10, width = 50)
    textDisplay.grid(row = 1, columnspan = 5)
    textDisplay.insert(tk.END, Rock())

buttonRock = tk.Button(text = "Rock", command = display).grid(row = 0, column = 1, padx = 10)
buttonPaper = tk.Button(text = "Paper").grid(row = 0, column = 2, padx = 10)
buttonScissors = tk.Button(text = "Scissors").grid(row = 0, column = 3, padx = 10)

root.mainloop()

任何帮助将不胜感激。

编辑:第二个想法 - 我可以想象我试图强迫游戏以这种方式工作,这让我自己变得复杂了。使用随机模块,我可以使用一个列表功能为计算机选择,并将随机选择保存在参数中,然后将值返回到显示函数中。

编号_42O

因此,如果我做对了,您只想单击按钮更改文本小部件中的文本。为此,您有两个简单且非常相似的选择。首先是像您一样定义 3 个函数,然后让它们直接更改文本。第二种选择是创建一个函数,根据给定的内容更改文本。请注意,在第二种情况下,我们将不得不使用lambdawhich 在较小的项目中效果很好,但当程序变大时会降低程序的效率。

第一个选项:

import tkinter as tk

class App:
    def __init__(self):
        root=tk.Tk()
        root.title("Rock Paper Scissors")
        root.geometry("420x200")
        self.text=Text(root)
        self.text.grid(row=1,columnspan=5)
        tk.Button(root,text="Rock",command=self.Rock).grid(row=0,column=1,padx=10)
        tk.Button(root,text="Paper",command=self.Paper).grid(row=0,column=2)
        tk.Button(root,text="Scissors",command=self.Scissors).grid(row=0,column=3,padx=10)
        root.mainloop()

    def Rock(self):
        text="Paper!"
        self.text.delete(0,END) #delete everything from the Text
        self.text.insert(0,text) #put the text in

    def Paper(self):
        text="Scissors!"
        self.text.delete(0,END) #delete everything from the Text
        self.text.insert(0,text) #put the text in

    def Scissors(self):
        text="Rock!"
        self.text.delete(0,END) #delete everything from the Text
        self.text.insert(0,text) #put the text in

if __name__=='__main__':
    App()

第二种选择:

import tkinter as tk

class App:
    def __init__(self):
        root=tk.Tk()
        root.title("Rock Paper Scissors")
        root.geometry("420x200")
        self.text=Text(root)
        self.text.grid(row=1,columnspan=5)
        tk.Button(root,text="Rock",command=lambda: self.updateText('Paper!')).grid(row=0,column=1,padx=10)
        tk.Button(root,text="Paper",command=lambda: self.updateText('Scissors!')).grid(row=0,column=2)
        tk.Button(root,text="Scissors",command=lambda: self.updateText('Rock!')).grid(row=0,column=3,padx=10)
        root.mainloop()

    def updateText(self,text):
        self.text.delete(0,END) #delete everything from the Text
        self.text.insert(0,text) #put the text in

if __name__=='__main__':
    App()

我这里的一些小笔记:

  1. 如果您在小部件本身上使用grid, packor place,则不会将小部件分配给变量,而是将grid,packplace函数的返回值分配给None. 因此,而是首先将小部件分配给一个变量,然后像我为Text-widget所做的那样在其上使用几何管理器
  2. 之后您不必使用 title 函数额外设置标题。您可以使用中的className-argument设置它Tk
  3. 如果您正在使用 tkinter,则可以在功能上完成它,而是使用类来构建 GUI。
  4. 创建新小部件时,请务必首先将根窗口的变量传递给它们。如果你不这样做,他们也会自己得到它,但这需要更多不必要的背景活动,如果你Tk打开了多个 -窗口,它会自动选择一个可能不是你想要的。
  5. 最后还有一个小技巧:如果您想了解有关所有 tkinter 小部件的更多信息,请尝试http://effbot.org/tkinterbook/tkinter-index.htm#class-reference

我希望它有帮助。玩得开心编程!

编辑:我刚刚看到您对随机模块的编辑。在这种情况下,我会推荐第二个选项。只需text从中删除-argumentupdateText并替换lambda: self.updateText(...)self.updateText(). updateText其本身而言,您添加了您提到的随机列表。:D

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将多个文本字段输入及其功能连接到 tkinter python 中的一个按钮?

来自分类Dev

如何允许在一组 tkinter 小部件中连续切换焦点而不会卡在最后一个小部件上?

来自分类Dev

在 Tkinter 中的文本小部件中添加文本链接

来自分类Dev

我如何制作一个按钮,使其在按下时将产品名称显示为文本小部件,而无需在Tkinter中使用Entry小部件

来自分类Dev

tkinter:在输入小部件已满时将焦点移到下一个小部件,而不会丢失按键

来自分类Dev

在Tkinter中滚动一个小部件与另一个小部件

来自分类Dev

如果我在一个函数中创建了小部件,如何使用Python Tkinter在另一个函数中访问它们?

来自分类Dev

如何在一个框架中相对于Tkinter中的其他框架扩展窗口小部件的大小(帮助:Tkinter网格管理)

来自分类Dev

如何在 tkinter 按钮小部件中获取 text 参数的值,然后将该值作为参数传递给同一个按钮?

来自分类Dev

如何在Tkinter文本小部件中创建“加载轮”?

来自分类Dev

如何在Tkinter文本小部件中创建“加载轮”?

来自分类Dev

Tkinter:如何将图像插入文本小部件

来自分类Dev

如何将 Tkinter Text 小部件中的选定文本放到前面?

来自分类Dev

GTK 3如何将一个信号连接到多个小部件?

来自分类Dev

如何使用feedparser在tkinter文本小部件中添加文本链接?

来自分类Dev

如何通过仅输入同一个窗口小部件来将文本输入到两个文本窗口小部件中

来自分类Dev

Tkinter:如何将文本小部件嵌入画布小部件

来自分类Dev

Tkinter:如何将在“文本小部件”中输入的文本保存到新窗口中?

来自分类Dev

在Tkinter中更改按钮小部件的大小

来自分类Dev

如何使用 python tkinter 中的复选按钮在 Entry 小部件中显示或隐藏文本?

来自分类Dev

用tkinter文本小部件创建一个日志框

来自分类Dev

使用谷歌搜索结果附加一个 tkinter 文本小部件

来自分类Dev

Flutter如何使Wrap小部件中的Text小部件从上一个小部件的末尾开始而不是在前一个小部件的下面开始?

来自分类Dev

MacOS中的Python Tkinter检查按钮小部件:如何设置文本颜色

来自分类Dev

如何保持小部件在Tkinter中居中?

来自分类Dev

“如何在一行小部件中创建两个文本小部件”

来自分类Dev

如何从Jupyter笔记本中的Tkinter文本小部件中获取文本?

来自分类Dev

在卡片小部件中添加一个凸起按钮

来自分类Dev

如何将2个子小部件中的一个子小部件居中

Related 相关文章

  1. 1

    如何将多个文本字段输入及其功能连接到 tkinter python 中的一个按钮?

  2. 2

    如何允许在一组 tkinter 小部件中连续切换焦点而不会卡在最后一个小部件上?

  3. 3

    在 Tkinter 中的文本小部件中添加文本链接

  4. 4

    我如何制作一个按钮,使其在按下时将产品名称显示为文本小部件,而无需在Tkinter中使用Entry小部件

  5. 5

    tkinter:在输入小部件已满时将焦点移到下一个小部件,而不会丢失按键

  6. 6

    在Tkinter中滚动一个小部件与另一个小部件

  7. 7

    如果我在一个函数中创建了小部件,如何使用Python Tkinter在另一个函数中访问它们?

  8. 8

    如何在一个框架中相对于Tkinter中的其他框架扩展窗口小部件的大小(帮助:Tkinter网格管理)

  9. 9

    如何在 tkinter 按钮小部件中获取 text 参数的值,然后将该值作为参数传递给同一个按钮?

  10. 10

    如何在Tkinter文本小部件中创建“加载轮”?

  11. 11

    如何在Tkinter文本小部件中创建“加载轮”?

  12. 12

    Tkinter:如何将图像插入文本小部件

  13. 13

    如何将 Tkinter Text 小部件中的选定文本放到前面?

  14. 14

    GTK 3如何将一个信号连接到多个小部件?

  15. 15

    如何使用feedparser在tkinter文本小部件中添加文本链接?

  16. 16

    如何通过仅输入同一个窗口小部件来将文本输入到两个文本窗口小部件中

  17. 17

    Tkinter:如何将文本小部件嵌入画布小部件

  18. 18

    Tkinter:如何将在“文本小部件”中输入的文本保存到新窗口中?

  19. 19

    在Tkinter中更改按钮小部件的大小

  20. 20

    如何使用 python tkinter 中的复选按钮在 Entry 小部件中显示或隐藏文本?

  21. 21

    用tkinter文本小部件创建一个日志框

  22. 22

    使用谷歌搜索结果附加一个 tkinter 文本小部件

  23. 23

    Flutter如何使Wrap小部件中的Text小部件从上一个小部件的末尾开始而不是在前一个小部件的下面开始?

  24. 24

    MacOS中的Python Tkinter检查按钮小部件:如何设置文本颜色

  25. 25

    如何保持小部件在Tkinter中居中?

  26. 26

    “如何在一行小部件中创建两个文本小部件”

  27. 27

    如何从Jupyter笔记本中的Tkinter文本小部件中获取文本?

  28. 28

    在卡片小部件中添加一个凸起按钮

  29. 29

    如何将2个子小部件中的一个子小部件居中

热门标签

归档