【问题标题】:Python Tkinter button not appearing?Python Tkinter 按钮没有出现?
【发布时间】:2023-12-04 12:15:01
【问题描述】:

我是 tkinter 新手,我在 python 中有这段代码:

#import the tkinter module
from tkinter import *
import tkinter


calc_window = tkinter.Tk()
calc_window.title('Calculator Program')


button_1 = tkinter.Button(text = '1', width = '30', height = '20')
button_1 = '1'

calc_window.mainloop()

但是当我运行它时,按钮没有出现。有谁知道为什么?谢谢!

【问题讨论】:

  • 你需要将按钮添加到calc_window
  • 只是出于好奇,你为什么要做from tkinter import *import tkinter?这是多余的。一般来说,坚持后一种选择。
  • 你为什么不直接用谷歌搜索“tkinter 按钮”?第一次点击导致这个优秀的示例填充页面:effbot.org/tkinterbook/button.htm

标签: python tkinter calculator


【解决方案1】:

让小部件出现需要两个步骤:您必须创建小部件,并且必须将其添加到布局中。这意味着您需要使用几何管理器之一 packplacegrid 将其定位在其容器中的某个位置。

例如,这是让您的代码工作的一种方法:

button_1 = tkinter.Button(text = '1', width = '30', height = '20')
button_1.pack(side="top")

gridpack 的选择由您决定。如果您按行和列进行布局,grid 是有意义的,因为您可以在调用 grid 时指定行和列。如果您要从左到右或从上到下对齐,pack 会更简单一些,并且专为此目的而设计。

注意:place 很少使用,因为它是为精确控制而设计的,这意味着您必须手动计算 x 和 y 坐标以及小部件的宽度和高度。这很乏味,并且通常会导致小部件无法很好地响应主窗口中的更改(例如当用户调整大小时)。您最终也会得到一些不灵活的代码。

要知道的重要一点是,您可以在同一个程序中同时使用packgrid,但不能在具有相同父级的不同小部件上同时使用两者。

【讨论】:

    【解决方案2】:
    from tkinter import *
    import tkinter
    
    
    calc_window = tkinter.Tk()
    calc_window.title('Calculator Program')
    frame = Frame(calc_window )
    frame.pack()
    
    
    button_1 = tkinter.Button(frame,text = '1', width = '30', height = '20')
    button_1.pack(side=LEFT)
    
    
    calc_window.mainloop()
    

    尝试使用 pack() 添加按钮。我不知道你为什么试图在你的代码中分配button_1 = '1'

    一个很好的例子:

    from Tkinter import *
    
    class App:
    
        def __init__(self, master):
    
            frame = Frame(master)
            frame.pack()
    
            self.button = Button(
                frame, text="QUIT", fg="red", command=frame.quit
                )
            self.button.pack(side=LEFT)
    
            self.hi_there = Button(frame, text="Hello", command=self.say_hi)
            self.hi_there.pack(side=LEFT)
    
        def say_hi(self):
            print "hi there, everyone!"
    
    root = Tk()
    
    app = App(root)
    
    root.mainloop()
    

    【讨论】:

    • Button 需要一个用于打包的容器,但在您的第一个示例中并非如此。
    • @mhawke 请立即查看
    • 这样更好。运行时会发生什么?
    • @mhawke 当前系统没有安装 tkinter
    【解决方案3】:

    您没有打包 button_1。代码是:

    from tkinter import *
    
    root = Tk()
    root.title('Calculator Program')
    
    button_1 = Button(root, text='1', width='30', height='20')
    button_1.pack()
    
    root.mainloop()
    

    很简单! 希望这会有所帮助!

    【讨论】:

      【解决方案4】:
      from tkinter import *
      
      calc_window = Tk()
      
      calc_window.title('Calculator Program')
      
      button_1 = Button(text = '1')
      
      button_1.place(x=0,y=0,width = 30, height = 20)
      
      calc_window.mainloop()
      

      【讨论】:

      • 简短的解释也可能会有所帮助(即使在这里有些明显)。