[英]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()
我遇到的另一个问题是我的输入框输入绑定。 在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.