python - 帧在 Tkinter 中是否具有单独的帧位置?
问题描述
我遇到了一个问题,我以为我知道答案。很奇怪,我做了一个框架来放入条目和按钮,这样它们就不会因为我做了一个盒子而显得相距很远。但是条目和按钮不在框架中,因为框架的背景是红色的,但任何地方都没有红色,并且条目/按钮仍然奇怪地分开。
编码:
# Hex GUI
import re
import tkinter as tk
hexa_checker_regex = re.compile(r'^#')
class Window:
def __init__(self, master, error_checker):
self.error_checker = error_checker
self.master = master
self.master.configure(bg='LightBlue')
self.set_up()
def set_up(self):
# =====FRAME FOR ENTRYS + BUTTONS=====
self.enter_frame = tk.Frame(self.master, bg='Red').grid(row=0, column=2, sticky='n')
# =====COLOR BOX=====
self.color = tk.Frame(self.master, highlightbackground='Black', height=100, width=100, highlightthickness=5)
self.color.grid(row=0, column=0)
# =====SEPERATOR=====
tk.Frame(self.master, width=200, bg='LightBlue').grid(row=0, column=1)
# =====HEXADECIMAL COLORS=====
tk.Label(self.enter_frame, text='Hex:', bg='LightBlue').grid(row=0, column=2, sticky='n')
self.the_color_hex = tk.Entry(self.enter_frame, width=50)
self.the_color_hex.grid(row=0, column=3, sticky='n')
tk.Button(self.enter_frame, text='Change Color', command=self.change_color_hex).grid(row=0, column=4, sticky='n')
# =====HEX ERROR=====
tk.Label(self.enter_frame, textvariable=self.error_checker, bg='LightBlue').grid(row=1, column=2, columnspan=2, sticky='n')
# =====REGULAR COLORS===== <--- UNFINISHED RAN INTO ERROR FIRST
tk.Label(self.enter_frame, text='Color:', bg='LightBlue').grid(row=2, column=2, sticky='n')
self.reg_color = tk.Entry(self.enter_frame, width=50)
self.reg_color.grid(row=2, column=3, sticky='n')
def change_color_hex(self):
if hexa_checker_regex.search(self.the_color_hex.get()) is None:
self.error_checker.set('That is an invalid hexadecimal value!')
else:
try:
self.color.configure(bg=self.the_color.get())
self.error_checker.set('')
except:
self.error_checker.set('That is an invalid hexadecimal value!')
self.the_color_hex.delete(0, 'end')
root = tk.Tk()
error_checker = tk.StringVar()
app = Window(root, error_checker)
root.mainloop()
那么,为什么条目和按钮不在框架中。另外,如果条目和按钮在框架中,为什么它们的位置会受到框的影响(它们不是因为框架的背景是红色的)?
解决方案
问题是这条线
self.enter_frame = tk.Frame(self.master, bg='Red').grid(row=0, column=2, sticky='n')
self.enter_frame 将等于 'None' 因此 tkinter 不能使用它来放置其他小部件。将此更改为
self.enter_frame = tk.Frame(self.master, bg='Red')
self.enter_frame.grid(row=0, column=2, sticky='n')
你的一些问题就会消失。
另一个错误是这一行
self.color.configure(bg=self.the_color.get())
它应该是
self.color.configure(bg=self.the_color_hex.get())
推荐阅读
- objective-c - 架构 x86_64 的未定义符号:“_OBJC_CLASS_$_Lexicontext”
- apache - 为什么 apache 服务器不能与 bettercap 一起使用?
- html - 在 CSS 中获取 div、按钮等的宽度
- java - 通过流式传输将多部分文件上传到 Amazon S3 时内存使用率高?
- sql - 作业调度程序不在 oracle 中执行
- php - 如何将我的日期和时间字符串连接在一起?
- python - 运行 collectstatic 命令时出现权限被拒绝错误
- c++ - C++ 不能链接到前缀为 __imp_ 的符号
- gnuplot - 如何使用gnuplot导入具有固定列宽的数据?
- point-cloud-library - 如何使用 pcl 的聚类方法来聚类 6d 数据,例如 Eigen::Matrix