【发布时间】:2017-06-29 16:51:59
【问题描述】:
这就是问题所在。我正在使用 Python 的 TKinter 对 GUI 进行编程,并且我需要将窗口设置为特定大小。该程序的发布版本将屏幕设置为root.attributes("-fullscreen", True),因此它是全屏的,用户将无法访问任何菜单。所述屏幕将是 800x480 平板电脑屏幕。
显然我是在比 800x480 大得多的屏幕上编程,所以当我创建我的 tkinter 窗口时,我设置 root.minsize("800x480") 来模拟程序所处的环境。
至于 GUI 上的内容,我将提供一系列按钮和其他内容。窗口本身将被分成两个框架:一个按钮框架和一个可视框架。顾名思义,Button Frame 是一个完全由 Buttons 组成的 Frame,用于用户输入,而 Visual Frame 显然只包含用户的视觉输出。
所以这是我的问题。我目前正在研究 Button Frame,但我遇到了 Frame 尺寸不正确的问题。由于我还没有为可视框架完成编程,所以我刚刚创建了两个按钮框架并将它们放入根窗口。两个框架都应该占据整个屏幕,但它们不是。这是我的代码:
import tkinter as tk
from tkinter import ttk
class ButtonManager(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.config(background = 'green')
self.columnconfigure(0, weight = 1)
self.rowconfigure(0, weight = 1)
lblFrame = LabelFrame(self, controller)
lblFrame.grid(column = 0, row = 0, sticky = "nsew")
lblFrame.tkraise()
btnFrame = ButtonFrame(self, controller)
btnFrame.grid(column = 0, row = 1, sticky = "nsew")
btnFrame.tkraise()
for child in self.winfo_children():
child.grid_configure(padx = 5, pady = 5)
class LabelFrame(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.config(background = 'blue')
lblTitleBar = ttk.Label(self, text = 'TITLE BAR', background = 'grey', font = ("Arial", 20, "bold"))
lblTitleBar.grid(column = 1, row = 1, columnspan = 4, sticky = "nsew")
lblTextBar = ttk.Label(self, text = 'test text', background = 'grey', font = ("Arial", 16, "bold"))
lblTextBar.grid(column = 1, row = 2, columnspan = 4, sticky = "nsew")
class ButtonFrame(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.config(background = 'red')
btn1 = ttk.Button(self, text = '1', command = lambda : print("1"))
btn1.grid(column = 1, row = 1, columnspan = 2, rowspan = 2, sticky = "nsew")
#Not gonna type out the code for all the buttons, but I have 2 columns, and 6 rows.
#The buttons on the 4th and 6th row span the columns of both rows.
#In total there are 10 buttons
for child in self.winfo_children():
child.grid_configure(padx = 5, pady = 5)
class Interface(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.grid(column = 0, row = 0, sticky = "nsew")
container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0, weight = 1)
bMan1 = ButtonManager(container, self)
bMan1.grid(column = 0, row = 0, sticky = "nsew")
bMan2 = ButtonManager(container, self)
bMan2.grid(column = 1, row = 0, sticky = "nsew")
interface = Interface()
interface.minsize(800, 480)
interface.mainloop()
正如我上面所说,我的问题是我需要每个 ButtonManager 对象在每个宽度上占据屏幕的一半。然而,我得到了 2 个小盒子和一个大的灰色区域。
随机颜色用于测试目的顺便说一句:P
编辑:我的代码中有一些复制/粘贴错误,现在它应该作为一个文件工作。道歉。
【问题讨论】:
-
如果您创建了一个不需要两个单独文件的 minimal reproducible example,这将非常有帮助。
-
您的 ButtonFrame 似乎坏了,还有其他错误。您的代码需要可运行。
-
@BryanOakley 我会设置它以便它可以是一个文件,编辑公司。我确实复制/粘贴了错误的 ButtonFrame 函数,我忘记了
def __init__>__
标签: python user-interface tkinter