繁体   English   中英

如何将 Tkinter 中的按钮粘贴到框架的左侧

[英]How to Sticky buttons in Tkinter to left of a Frame

所以我第一次在 Python 中创建了一个 GUI 应用程序,使用 TKinter,我遇到了一些问题。 首先,我尝试粘贴按钮并查看堆栈溢出中的各种解决方案,了解如何让它们粘在框架的左侧。 但由于某种原因,我无法让我的菜单按钮保持不变。 我有一种感觉,这与我如何布置列有关,但我尝试过跨列等,但似乎无法解决问题。 代码在下面(按钮在 SettingsGUI 类中) ,当前的客户端视图在下面:

import tkinter as tk
from tkinter import ttk
from abc import ABC, abstractmethod

root = tk.Tk() 
root.title('GUI') 

class MUDGUI:
    def __init__(self, master):
        menuBar = SettingsGUI(self, master)
        roomChat = RoomChatGUI(self, master)

#Abstract class that all the chat boxes will inherit from
class ChatGUI(ABC):
    @abstractmethod
    def sendMessage(self):
        print("Send message to server and clear the entry box")

class RoomChatGUI(ChatGUI):
    def sendMessage(self):
        super().sendMessage()

    def __init__(self, parent, master):
        self.roomChatFrame = tk.Frame(master)
        self.roomChatFrame.grid(row=1)

        #Add text display that looks like command line
        self.roomChatText = tk.Text(self.roomChatFrame, height=10, width=75, bg="black", fg="white")
        self.roomChatText.grid(row=0)
        self.roomChatText.insert(tk.END, "Room chat frame")
        self.roomChatText.config(state=tk.DISABLED)

        #Add input (entry) 
        self.roomChatEntry = tk.Entry(self.roomChatFrame, width=100, bg="black", fg="white")
        self.roomChatEntry.bind('<Return>', sendMessage)
        self.roomChatEntry.grid(row=1)

class SettingsGUI:
    def __init__(self, parent, master):
        self.settingsFrame = tk.Frame(master)
        self.settingsFrame.grid(row=0, column=0)

        #Need settings menu
        self.settingsButton = tk.Button(self.settingsFrame, text="Settings")
        self.settingsButton.grid(row=0, column=0, sticky="W")

        #Need close button
        self.closeButton = tk.Button(self.settingsFrame, text="Close", command=self.settingsFrame.quit)
        self.closeButton.grid(row=0, column=1, sticky="W")

gui = MUDGUI(root)
root.mainloop()

带有奇怪按钮位置的 GUI

我遇到的另一个问题是我的输入框输入绑定。 RoomChatGUI 中,我试图将 Enter 键绑定到 Entry 框,以便当用户按下“Enter”时将调用 sendMessage 方法,该方法应调用其超级 sendMessage(在抽象 ChatGUI 类中定义)。 但是,相反,它给出了“名称 'sendMessage' 未定义”的错误。 不知道这里要改变什么。

任何和所有的帮助将不胜感激

按钮粘到框架的左侧。 问题是您没有要求将框架粘在窗户的两侧。

添加框架到窗口时需要定义sticky属性:

self.settingsFrame.grid(row=0, column=0, sticky="nsew")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM