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?