Re: Falsches Fensterformat, bei Änderung der Spaltenanzahl in Tabelle
Verfasst: Donnerstag 6. Dezember 2018, 15:38
Habe das Beispiel ein wenig modifiziert:
Bei "EXIT" lasse ich mir die Values ausgeben.
Ich habe dabei bemerkt, dass bei reinen Zahlenfeldern, wenn eine "0" voran steht diese entfernt wird.
Es gibt ja z.B. Bestellartikel, bei der eine 0 voran steht > 01236689 == 1236689?
Ist das so gewollt, oder gibt es da einen Trick, dies zu unterbinden?
Auch, ist die erste Spalte sehr breit, wie kann ich da die Breite verändern?
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# For Python3.x
import tkinter as tk
import tkinter.ttk as ttk
'''
Created on Mar 21, 2016
@author: Bill Begueradj
'''
class Begueradj(tk.Frame):
'''
classdocs
'''
def __init__(self, parent, label, data, width):
'''
Constructor
'''
tk.Frame.__init__(self, parent)
self.parent=parent
self.label=label
self.data=data
self.width=width
self.initialize_user_interface()
def initialize_user_interface(self):
"""Draw a user interface allowing the user to type
items and insert them into the treeview
"""
self.parent.title("Canvas Test")
self.parent.grid_rowconfigure(0,weight=1)
self.parent.grid_columnconfigure(0,weight=1)
self.parent.config(background="lavender")
self.tree = ttk.Treeview(self.parent, columns=self.label)
for i, name in enumerate(self.label):
name = name.upper()
text = '{}:'.format(name)
width = self.width[i] * 10
# Set the treeview
self.tree.heading('{}'.format(i), text=name, anchor=tk.W)
self.tree.column('{}'.format(i), width=width, stretch=tk.YES)
self.tree.grid(row=0, columnspan=i+1, sticky=tk.NSEW)
# Define the different GUI widgets
if name == 'LIEFERANT':
self.supplier_label = tk.Label(self.parent, width=width,
bg='lavender', text = text, anchor=tk.E)
self.supplier_entry = tk.Entry(self.parent)
self.supplier_label.grid(row = 1, column = 0, sticky = tk.E)
self.supplier_entry.grid(row = 1, column = 1, sticky = tk.W)
elif name == 'ARTIKEL':
self.article_label = tk.Label(self.parent, width=width,
bg='lavender', text = text, anchor=tk.E)
self.article_entry = tk.Entry(self.parent)
self.article_label.grid(row = 2, column = 0, sticky = tk.E)
self.article_entry.grid(row = 2, column = 1, sticky = tk.W)
self.submit_button = tk.Button(self.parent, text = "Insert",
command = self.insert_data)
self.submit_button.grid(row = 3, column = 1, sticky = tk.W)
self.exit_button = tk.Button(self.parent, text = "Exit",
command = self.output_data)
self.exit_button.grid(row = 3, column = 2, sticky = tk.W)
self.treeview = self.tree
# Initialize the counter
self.i = 1
def insert_data(self):
"""
Insertion method.
"""
data = self.data[(self.supplier_entry.get(), self.article_entry.get())]
pos = '#{}{}'.format((3 - len(str(self.i))) * '0', self.i)
data[0] = str(pos)
self.treeview.insert('', 'end', text='ITEM_{}'.format(self.i),
values=[x.upper() for x in data])
# Increment counter
self.i = self.i + 1
def output_data(self):
"""
Output method.
"""
self.parent.quit()
for child in self.treeview.get_children():
print(self.treeview.item(child)["values"])
def main():
root=tk.Tk()
label = ['position', 'lieferant', 'artikel', 'benennung', 'hersteller',
'herstellernummer', 've', 'inhalt', 'vk', 'mwst']
data = {
('123', '123456789') :['', '123', '123456789',
'produkt 123456789, din a4, weiß, 80g',
'hersteller', 'herstellernummer', 'stück', '1', '3.25', '0.19']
}
width = [10, 10, 20, 50, 25, 30, 10, 10, 15, 10]
d=Begueradj(root, label, data, width)
root.mainloop()
if __name__=="__main__":
main()
Ich habe dabei bemerkt, dass bei reinen Zahlenfeldern, wenn eine "0" voran steht diese entfernt wird.
Es gibt ja z.B. Bestellartikel, bei der eine 0 voran steht > 01236689 == 1236689?
Ist das so gewollt, oder gibt es da einen Trick, dies zu unterbinden?
Auch, ist die erste Spalte sehr breit, wie kann ich da die Breite verändern?