Hi Alfons
Alfons Mittelmeyer hat geschrieben:Hab mir Deinen Code jetzt angeschaut. Wolltest ja gar nichts drüberziehen.
Aber hier ziehe ich etwas darüber:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from functools import partial
try:
# Tkinter for Python 2.xx
import Tkinter as tk
import tkFont as fnt
except:
# Tkinter for Python 3.xx
import tkinter as tk
import tkinter.font as fnt
APP_TITLE = "Testtabelle mit Frames"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 300
APP_HEIGHT = 200
BUTTON_01 = 'Letzte horizontale\nReihe entfernen'
BUTTON_02 = 'Letzte vertikale\nKolonne entfernen'
BUTTON_03 = 'Platziere 3x3-Element\n Frame'
BUTTONS = [BUTTON_01, BUTTON_02, BUTTON_03]
HORIZONTAL = 'horz'
VERTICAL = 'vert'
class SimpleTable(tk.Frame):
def __init__(self, parent, rows, columns):
self.parent = parent
self.rows = rows
self.columns = columns
tk.Frame.__init__(self, parent, background="black")
self.cells = []
for row in range(rows):
current_row = []
for column in range(columns):
frame = tk.Frame(self, borderwidth=1, width=200, height=30,
relief='raised')
frame.grid(row=row, column=column, sticky="nsew")
current_row.append(frame)
self.cells.append(current_row)
for column in range(columns):
self.grid_columnconfigure(column, weight=1)
def set(self, row, column, value):
widget = self.cells[row][column]
widget.configure(height=0)
def remove_row(self, row=6):
for label in self.cells[row]:
label.config(height=0)
label.update_idletasks()
def remove_cells(self, direction):
if direction == VERTICAL:
# Remove last column on the right side of the table
last_column = len(self.cells[0])
last_row = len(self.cells)
#print('Rows:', last_row)
for row in range(last_row):
print(row)
self.cells[row][last_column-1].destroy()
del self.cells[row][last_column-1:]
#print(len(self.cells[0]))
if direction == HORIZONTAL:
# Remove last row on the bottom side of the table
last_column = len(self.cells[0])
last_row = len(self.cells)
#print('Columns:', last_column)
for column in range(last_column):
print(column)
self.cells[last_row-1][column].destroy() #config(height=0)
del self.cells[last_row-1:]
#print(self.cells)
def add_big_frame(self):
self.big_frame = tk.Frame(self, bg='red', bd=1, relief='raised')
self.big_frame.grid(row=0, column=0, rowspan=3, columnspan=3,
sticky='news')
self.button = tk.Button(self.big_frame, text='Hello!', bd=1,
highlightthickness=0)
self.button.pack(expand=True)
class Application(tk.Frame):
def __init__(self, master):
self.master = master
self.master.protocol("WM_DELETE_WINDOW", self.close)
tk.Frame.__init__(self, master)
self.table = SimpleTable(self, rows=7, columns=6)
self.table.pack(side="top", fill="x")
#table.set(0,0,"Hello, world")
self.master.geometry('')
button_frame = tk.Frame(self)
button_frame.pack()
[tk.Button(button_frame, text=button_text,
command=partial(self.on_button_press, button_text)).pack(
side='left', pady=5)
for button_text in BUTTONS]
def on_button_press(self, button):
if button == BUTTON_01:
self.remove_cells(HORIZONTAL)
if button == BUTTON_02:
self.remove_cells(VERTICAL)
if button == BUTTON_03:
self.table.add_big_frame()
def remove_cells(self, direction):
self.table.remove_cells(direction)
def close(self):
print("Application-Shutdown")
self.master.destroy()
def main():
app_win = tk.Tk()
app_win.title(APP_TITLE)
app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
app = Application(app_win)
app.pack(fill='both', expand=True, padx=0, pady=0)
app_win.mainloop()
if __name__ == '__main__':
main()
Warum braucht es dein vorgeschlagenes
lower nicht?
Gruss wuf
