2013-05-07 1 views
-1

Я делаю эту программу. Идея состоит в том, чтобы сэкономить время от секундомера до листа excel. Но было бы лучше сохранить их всех в одном листе. Сейчас он сохраняет несколько. Я просто не могу придумать способ, чтобы все секундомеры сохранялись на одном листе в разных столбцах. Поэтому, если кто-нибудь может подумать об этом, я был бы очень признателен. Я знаю, что, вероятно, я пропустил что-то простое, но я должен спросить. Я знаю, что это не полностью прокомментировано. Комментарии на самом деле просто короткие, чтобы напомнить мне, что делает код. если я пропустил часть информации, вам нужно, что может помочь ответить на мой вопрос, просто спросите. Вот мой код:Необходимо сохранить данные из множественных экземпляров класса в разные столбцы в одном файле Excel, используя xlwt

import pygtk, xlwt, pango, os 
pygtk.require('2.0') 
import gtk 

import gobject 
gobject.threads_init() 

#inittial window 
class mainTimer: 
def new_timer(self, widget): 
    new_Timer = Timers() 


def destroy(self, widget, data=None): 
    gtk.main_quit() 

def __init__(self): 
    self.timer_window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    self.timer_window.set_position(gtk.WIN_POS_CENTER) 
    self.timer_window.set_size_request(500,300) 
    self.timer_window.set_title("Project Starter") 
    self.button1 = gtk.Button("Pause") 
    self.button1.connect("clicked", self.destroy) 
    self.button1.set_tooltip_text("This will pause timer") 

    self.button2 = gtk.Button("New Project Timer") 
    self.button2.connect("clicked", self.new_timer) 
    self.button2.set_tooltip_text("This will start a new project timer") 

    fixed = gtk.Fixed() 
    fixed.put(self.button1, 30, 250) 
    fixed.put(self.button2, 90, 250) 
    self.timer_window.add(fixed) 
    self.timer_window.show_all() 
    self.timer_window.connect("destroy", self.destroy) 

def main(self): 
    gtk.main() 


class Timers: 
def destroy(self, widget, data=None): 
    self.gtk.main_quit() 


def __init__(self): 
    self.sec = 0 
    self.min = 0 
    self.hour = 0 
    self.tg = 0 
    self.total_time = (self.hour,self.min,self.sec) 
    self.win() 
    self.project_name() 

#start window timer in thread 
def start_t(self, widget): 
    if self.tg == 0: 
     self.tg = gobject.timeout_add(100, self.count) 
#stop window timer 
def stop_t(self, widget): 
    if self.tg != 0: 
     gobject.source_remove(self.tg) 
     self.tg = 0 
#Project Name pop up box 
def project_name(self): 
    self.projectName = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    self.projectName.set_position(gtk.WIN_POS_CENTER) 
    self.projectName.set_size_request(280,160) 
    self.text_entry = gtk.Entry() 
    self.p_t = self.projectName.get_title() 
    self.enter_button = gtk.Button("Enter") 
    self.enter_button.connect("clicked", self.change_p_n) 
    fixed = gtk.Fixed() 
    fixed.put(self.text_entry, 50, 100) 
    fixed.put(self.enter_button,210,100) 
    self.projectName.add(fixed) 
    self.projectName.show_all() 
#change project name 
def change_p_n(self,widget): 
    self.timer_window.set_title(self.text_entry.get_text()) 
    self.projectName.destroy() 

def save_box(self,widget): 
    self.save = gtk.FileChooserDialog("Save As...", None, 
    gtk.FILE_CHOOSER_ACTION_SAVE, 
    (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, 
    gtk.STOCK_SAVE, gtk.RESPONSE_OK)) 
    self.save.set_default_response(gtk.RESPONSE_OK) 
    self.save.set_current_name(self.timer_window.get_title()) 
    self.f_filter = gtk.FileFilter() 
    self.f_filter.set_name("Save Times") 
    self.f_filter.add_pattern("*") 
    self.save.add_filter(self.f_filter) 
    self.response = self.save.run() 

    if self.response == gtk.RESPONSE_OK: 
     self.wbk = xlwt.Workbook() 
     self.sheet = self.wbk.add_sheet(self.timer_window.get_title()) 
     self.sheet.write(0,0,self.time1.get_text()) 
     self.sheet.write(0,1,self.time2.get_text()) 
     self.sheet.write(0,2,self.time3.get_text()) 
     self.wbk.save(self.save.get_filename()) 


#timer window 
def win(self): 
    self.timer_window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
    self.timer_window.set_position(gtk.WIN_POS_CENTER) 
    self.timer_window.set_size_request(500,300) 
    self.timer_window.set_title("Project Timers") 
    self.button1 = gtk.Button("Pause") 
    self.button1.set_tooltip_text("This will pause timer") 
    self.button1.connect("clicked", self.stop_t) 
    self.button2 = gtk.Button("Start") 
    self.button2.set_tooltip_text("This will start timer") 
    self.button2.connect("clicked", self.start_t) 
    self.button3 = gtk.Button("Save") 
    self.button3.set_tooltip_text("This will save your time to a excel file") 
    self.button3.connect("clicked", self.save_box) 
    self.time1 = gtk.Label("00") 
    self.time1.modify_font(pango.FontDescription("40")) 
    self.time2 = gtk.Label("00") 
    self.time2.modify_font(pango.FontDescription("40")) 
    self.time3 = gtk.Label("00") 
    self.time3.modify_font(pango.FontDescription("30")) 
    self.time4 = gtk.Label(":") 
    self.time4.modify_font(pango.FontDescription("40")) 
    self.time5 = gtk.Label(":") 
    self.time5.modify_font(pango.FontDescription("40")) 


    fixed = gtk.Fixed() 
    fixed.put(self.button1, 30, 250) 
    fixed.put(self.button2, 90, 250) 
    fixed.put(self.button3, 150, 250) 
    fixed.put(self.time1, 140, 100) 
    fixed.put(self.time2, 215, 100) 
    fixed.put(self.time3, 300, 110) 
    fixed.put(self.time4, 280, 100) 
    fixed.put(self.time5, 200, 100) 
    self.timer_window.add(fixed) 
    self.timer_window.show_all() 


#timer count function 
def count(self): 
    self.sec += 1 
    if self.sec >= 59: 
     self.sec = 0 
     self.min += 1 
    if self.min >= 59: 
     self.min = 0 
     self.hour +=1 

    self.time1.set_text(str(self.hour)) 
    self.time2.set_text(str(self.min)) 
    self.time3.set_text(str(self.sec)) 
    return True 







if __name__ == "__main__": 
timer1 = mainTimer() 
timer1.main() 
+0

Вместо того чтобы давать всю вашу программу, гораздо лучше снять все ненужные вещи и предоставить наименьший пример, демонстрирующий вашу проблему. Трудно найти соответствующий код в огромном примере, и никто не может даже запустить его для его отладки, если у них нет pygtk. Вероятно, поэтому вам потребовалось 45 минут, чтобы получить ответ, и кто-то запустил вас в это время. Подробнее см. [SSCCE] (http://sscce.org). – abarnert

ответ

0

Во-первых, есть причина, что вам нужно, чтобы сохранить их в качестве .xls файла вместо файла .csv? Если вам нужны функции, которые CSV не может обрабатывать (формулы, графики и т. Д.), Очевидно, вам нужно работать с реальной таблицей, но для кучи столбцов статических данных CSV намного проще, а Excel не имеет проблем с этим.

Но если вы действительно должны использовать файл .xls ...


Причины это создает новый файл каждый раз, что вы явно говорите это, чтобы создать новый файл каждый раз. Вот код:

self.wbk = xlwt.Workbook() 
self.sheet = self.wbk.add_sheet(self.timer_window.get_title()) 
self.sheet.write(0,0,self.time1.get_text()) 
self.sheet.write(0,1,self.time2.get_text()) 
self.sheet.write(0,2,self.time3.get_text()) 
self.wbk.save(self.save.get_filename()) 

Это создает новый Workbook, добавляет лист, пишет три ячейки на этот лист, и сохраняет его. Итак, вы получаете совершенно новый файл.

Если вы этого не хотите, просто не создавайте новую книгу и лист каждый раз. И вам также нужно будет отслеживать следующую строку, поэтому вы не будете переписывать одни и те же ячейки снова и снова. Вот и все.

Например:

def __init__(self): 
    # ... existing code 
    self.wbk = xlwt.Workbook() 
    self.sheet = self.wbk.add_sheet(self.timer_window.get_title()) 
    self.next_row = 0 

def save_box(self,widget): 
    # ... existing code 
    if self.response == gtk.RESPONSE_OK: 
     self.sheet.write(self.next_row, 0,self.time1.get_text()) 
     self.sheet.write(self.next_row, 1,self.time2.get_text()) 
     self.sheet.write(self.next_row, 2,self.time3.get_text()) 
     self.next_row += 1 

Или, в качестве альтернативы, вместо того чтобы создавать новый лист каждый раз, повторно открыть тот же лист каждый раз, и добавить в конце его.

+0

Спасибо, что это был ответ, который я искал. Я сожалею о публикации всего моего кода. Я впервые прошу эту помощь помочь здесь. Я буду помнить в следующий раз. – user2360297