【问题标题】:Is there a way i can place tkinter buttons next to each other using .pack() while keeping them center justified?有没有办法我可以使用 .pack() 将 tkinter 按钮彼此相邻放置,同时保持它们居中对齐?
【发布时间】:2021-08-11 05:12:34
【问题描述】:

我希望在我的条目小部件下有两个相邻的 Tkinter 按钮 (ttk.Button),同时仍保持它们居中对齐。我已经将 .pack() 用于框架中的其他小部件,因此我不能在它们上使用 .grid() 或 .place()。我知道您可以使用 tk.LEFT、tk.RIGHT 等将它们排成一条直线,但这会将它们移到最远的边缘。有没有办法可以使用这样的方法将它们彼此相邻放置在窗口的中心?

这是我的代码:

class EmailPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        send_button = ttk.Button(self, text='Send Email\'s', command=lambda: send_email())
        send_button.pack(padx=10, pady=5)

        test_button = ttk.Button(self, text='Test Email', command=lambda: test_email())
        test_button.pack(padx=10, pady=5)

提前致谢

【问题讨论】:

  • 请提供您的代码,以便我们查看。

标签: python tkinter tk


【解决方案1】:

你可以创建一个tk.Frame,然后把按钮打包进去:

from tkinter import ttk   
import tkinter as tk

root=tk.Tk()
tk.Label(root,text='These 2 buttons are in centre!').pack()

f1=tk.Frame(root)
f1.pack(expand=1)
b1=ttk.Button(f1,text='Button 1')
b1.pack(expand=True,side=tk.BOTTOM)
b2=ttk.Button(f1,text='Button 2')
b2.pack(expand=True,side=tk.BOTTOM)

root.mainloop()

【讨论】:

  • 对不起,这对我不起作用。我认为我正在使用类来创建多个 Tkinter 页面,并且这些类被用作根窗口。创建小部件时,我必须在选项中使用“self”,而不是您的解决方案所必需的“f1”。请查看我之前添加到问题中的代码以了解我的意思。谢谢
  • 我设法通过在我的代码中使用 tk.LEFT 而不是 tk.BOTTOM 来完成这项工作。感谢您的帮助。
【解决方案2】:

我已经复制了您的代码并附加了一些必要的方法以使其成为一个工作示例。

在您的示例中,您的按钮命令不需要lambda,因为您没有向这些方法发送数据。

此外,self. 需要添加到小部件之前,tk.Frame 需要进行管理。


import tkinter as tk
from tkinter import ttk


class EmailPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        entry = tk.Entry( self, width = 40 )
        entry.pack(fill = tk.BOTH, expand = False)

        self.send_button = ttk.Button(self, text='Send Email\'s', command = self.send_email)
        self.send_button.pack(side=tk.RIGHT, fill = tk.BOTH, expand=True)

        self.test_button = ttk.Button(self, text='Test Email', command = self.test_email)
        self.test_button.pack(side=tk.LEFT, fill = tk.BOTH, expand=True)

        self.pack(fill = tk.BOTH, expand = True)

    def send_email( self ):
        pass

    def test_email( self ):
        pass

my_emailer = EmailPage(tk.Tk(), "")
my_emailer.master.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多