#python #tkinter
Вопрос:
Я пытаюсь создать программу периодической таблицы, и я хочу иметь сетку, подобную настройке, с помощью сетки
Возможно ли это и если да, то как. Спасибо.
Комментарии:
1. Посмотрите на
.grid
неофициальную документацию здесь .2. короткий ответ: да, вы можете поместить рамку внутри рамки с помощью сетки. это также довольно просто. просто создайте рамку (или используйте окно в качестве родителя), затем создайте, скажем, еще два кадра и установите родителя в качестве первого кадра и создайте сетку из этих кадров, затем вы можете создать еще несколько кадров, установив их родителей в качестве двух только что упомянутых кадров, а также их сетку, и это будет похоже на кадр внутри кадра, внутри кадра.
Ответ №1:
Да, вы можете, просто дайте вторичным кадрам родительский кадр в качестве аргумента, как и в любом другом виджете в tkinter:
variable = tk.Widget(parent, widget, specifics)
в вашем случае, когда вы в основном хотите отображать одну и ту же информацию для всех элементов, я бы создал подкласс, унаследованный от tk.Frame
класса и передающий ему всю соответствующую информацию, таким образом, вам нужно только один раз организовать свои небольшие фреймы.
Возможно, вы захотите начать с чего-то вроде этого:
import tkinter as tk
class Application(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.mainframe = tk.Frame(self)
self.mainframe.pack(fill="both", expand = True)
# note how we're now not calling for the tk.Frame class anymore,
# since we have our own custom one
# when calling our class we can now pass information to it
# right now only the name
self.vanadium = ElementFrame(self.mainframe, "Vanadium")
#placing in the main frame
self.vanadium.grid(row = 0, column = 0)
self.chromium = ElementFrame(self.mainframe, "Chromium")
#placing in the main frame
self.chromium.grid(row = 0, column = 1)
self.niobium = ElementFrame(self.mainframe, "Niobium")
#placing in the main frame
self.niobium.grid(row = 1, column = 0)
self.molybdenum = ElementFrame(self.mainframe, "Molybdenum")
#placing in the main frame
self.molybdenum.grid(row = 1, column = 1)
class ElementFrame(tk.Frame):
# here we are defining what variables need to be passed for a successful call
def __init__(self, parent, element):
tk.Frame.__init__(self, parent)
#pass variables through, like abbreviation, number, etc.
self.element = element
#organize your elements frame
self.elementlabel = tk.Label(self, text = element)
self.elementlabel.grid(row = 0, column = 0)
app = Application()
app.mainloop()