Форум сайта python.su
568
Конечно можно, даже нужно!
Офлайн
0
Подскажите пожалуйста, как?
Можно хотя бы на пальцах что куда
Офлайн
294
stas90Ваше окно это одельный класс, а все ваши процедуры методы класса
Можно хотя бы на пальцах что куда
[code python][/code]
Офлайн
0
Большое спасибо!
Сейчас в командировке, а на следующей неделе перепишу и скину на проверку ;-)
Офлайн
0
В общем вот так получилось,
данные будут загружаться из словарей в коде, т.к. нового ничего не будет:
# -*- coding: utf-8 -*- # coding: utf8 # coding=utf8 import collections from tkinter import Label, Entry, Listbox, Tk, END, Button import tkinter.ttk other = collections.OrderedDict( [ ("Гайка", "0.2"), ("Груз (кг)", "1") ]) anchor = collections.OrderedDict( [ ('А1', '1.6'), ('А2', '2.45'), ('А3', '3') ]) plate = collections.OrderedDict( [ ("1001", "0.314"), ("1002", "0.3925"), ("1003", "0.471") ]) category = collections.OrderedDict() category["Анкера"]=anchor category["Шайба"]=plate category["Прочее"]=other summ = {} categorySelected = "" totalW = 0 x=0 item="" class MainWindow: def __init__(self,master): self.master = master self.master.title("Расчет веса") self.tree = tkinter.ttk.Treeview(master) self.tree["columns"]=("c","a","b") self.tree.column("c", width=100 ) self.tree.column("a", width=100 ) self.tree.column("b", width=100) self.tree.heading("c", text="Длина") self.tree.heading("a", text="Количество") self.tree.heading("b", text="Вес, кг") self.lbl = Label(master, text = 'Количество:') self.enterField = Entry(master,width=10) self.lbl1 = Label(master, text = 'Длина:') self.enterFieldQ = Entry(master,width=10) self.lblRes = Label(master, text="Итого:") self.lblRes1 = Label(master, text="") self.resetBtn = Button(master, text="Сброс", command=self.resetFunc) self.categoryList = Listbox(master, width = 15) self.productList = Listbox(master, width = 30) self.tree.grid(row=3, columnspan=2) self.enterField.grid(row=1,column=1) self.lbl.grid(row=2, column=0) self.enterFieldQ.grid(row=2,column=1) self.lbl1.grid(row=1, column=0) self.lblRes.grid(row=4, column=0) self.lblRes1.grid(row=4, column=1) self.resetBtn.grid(row=5,columnspan=2) self.categoryList.grid(row=0, column=0) self.productList.grid(row=0, column=1) self.productList.bind('<<ListboxSelect>>', self.onSelectItem) self.categoryList.bind('<<ListboxSelect>>', self.onSelectCategory) self.enterField.bind("<Return>", self.addToTree) self.enterFieldQ.bind("<Return>", self.addToTree) self.tree.bind("<Double-1>", self.doubleClick) for i in category: self.categoryList.insert(END, i) def onSelectCategory(self,evt): print("Category selected") global categorySelected itemsCounter = self.productList.size() if itemsCounter > 0: self.productList.delete(0, END) categorySelected = self.categoryList.get(self.categoryList.curselection()) tableFill = {} if categorySelected == "Анкера": tableFill = anchor elif categorySelected == "Шайба": tableFill = plate elif categorySelected == "Прочее": tableFill = other for i in tableFill: self.productList.insert(END, i) def onSelectItem(self,evt): print ("Item selected") global item item = self.productList.get(self.productList.curselection()) def addToTree(self,evt): global x global categorySelected global totalW global item print ("Pressed enter") quantity = self.enterFieldQ.get() length = self.enterField.get() if length == "": length = 1 if quantity != "": weight = float(category[categorySelected][item]) try: length = length.replace(',','.') except: pass weight = weight * float(length) if item == "АК15": weight = weight + 0.2 if item == "А16В2": weight = weight + 0.2 if item == "А20В2": weight = weight + 0.2 if item == "А22В2": weight = weight + 0.2 if item == "А25В2": weight = weight + 0.2 weight = int(quantity)*weight weight = round(weight,2) if categorySelected != "Анкера": length = "" self.tree.insert("" , x, text=item, values=(length,quantity,weight)) self.tree.column("a", anchor="e") self.tree.column("b", anchor="e") self.tree.column("c", anchor="e") totalW = totalW + weight totalW = round(totalW,2) self.lblRes1.configure(text=totalW) self.enterField.delete(0,END) self.enterFieldQ.delete(0,END) x=x+1 def doubleClick(self,evt): global totalW print("doubleClick") if totalW > 0: selected_item = self.tree.selection()[0] print (selected_item) curItem = self.tree.focus() minusWeight = float(self.tree.item(curItem)["values"][2]) totalW = totalW - minusWeight totalW = round(totalW,2) self.lblRes1.configure(text=totalW) self.tree.delete(selected_item) def resetFunc(self): #global categorySelected global totalW global x global item #categorySelected = "" totalW = 0 x=0 item="" for i in self.tree.get_children(): self.tree.delete(i) self.lblRes1.configure(text="") def main(): root = Tk() app = MainWindow(root) root.mainloop() if __name__ == '__main__': main()
Офлайн
294
в таком виде можно было и не писать класс. В каждом методе куча global, причем я не вижу особой необходимости в их использовании. summ, categorySelected, totalW, x, item можно сделать атрибутами класса, а category хотябы передать агрументом.
[code python][/code]
Отредактировано PEHDOM (Июнь 7, 2017 22:22:23)
Офлайн
0
Подправлю, большое спасибо!
Офлайн