1

我希望我沒有錯過任何可以回答我的問題的主題。我現在在這裏,因爲我非常沮喪,並且厭倦了以下任務: - 我有一個帶Drive.Google的Spreasheet,裏面有很多數據 - 我想用wxPython創建一個應用程序,這個表格(以最簡單的方式) - 也想從一個用戶那裏得到多個數據,他們將通過一個漂亮的界面訪問這個應用程序(面板aka窗口) - 用戶引入的多個數據應該能夠工作數據從Spreasheet中提取出來。例如查看用戶引入的數據是否在電子表格中,以及用戶引入下一個數據的其他操作。 - 最後也是最重要的是向用戶展示結果(後來我還想添加一些功能來保存某種結果)wxPython:從Google Spreadsheet和用戶中獲取變量數據,使用所有變量,將結果返回給用戶

我希望我能夠清楚地表達我想要做什麼。現在我剛剛接觸Google API,Python和wxPython,但我有C++,php,html的使用經驗。 我已經花了2周的時間發現Drive.Google並學習了Python和wxPython。我確實遵循了所有關於這些的tuturials,做了我的筆記,閱讀了stackoverflow問題的答案,wiki.wxpython.org等。我每天都在學習,現在我可以單獨做很多事情,但要像上面描述的那樣具有所有功能。只是無法解決如何去做。至少請讓我朝着我的方向走。 Awfel很多時候都會花幾個小時做些例子,並且無處可去。我有Python,wxPython擴展,GoogleAppEngine啓動器,甚至pyCharm演示。請善待。這是我的第一個問題。

這裏是我迄今取得合併相關例子的爛攤子:

import wx 
import gdata.docs 
import gdata.docs.service 
import gdata.spreadsheet.service 
import re, os 

class Form(wx.Panel): 

    def __init__(self, *args, **kwargs): 
     super(Form, self).__init__(*args, **kwargs) 
     self.createControls() 
     self.bindEvents() 
     self.doLayout() 
     self.spreasht() 

    def createControls(self): 
     self.logger = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY) 
     self.saveButton = wx.Button(self, label="Elvegzes") 
     self.nameLabel = wx.StaticText(self, label="type Name1:") 
     self.nameTextCtrl = wx.TextCtrl(self, value="type here") 
     self.name2Label = wx.StaticText(self, label="type Name2:") 
     self.name2TextCtrl = wx.TextCtrl(self, value="type here") 


    def bindEvents(self): 
     for control, event, handler in \ 
      [(self.saveButton, wx.EVT_BUTTON, self.onSave), 
      (self.nameTextCtrl, wx.EVT_TEXT, self.onNameEntered), 
      (self.nameTextCtrl, wx.EVT_CHAR, self.onNameChanged)]: 
      control.Bind(event, handler) 


    def doLayout(self): 
      raise NotImplementedError 


    def spreadsht(self): 
     gd_client = gdata.spreadsheet.service.SpreadsheetsService() 
     gd_client.email = 'my email address' 
     gd_client.password = 'my password to it' 
     gd_client.source = 'payne.org-example-1' 
     gd_client.ProgrammaticLogin() 
     q = gdata.spreadsheet.service.DocumentQuery() 
     q['title'] = 'stationcenter' 
     q['title-exact'] = 'true' 
     feed = gd_client.GetSpreadsheetsFeed(query=q) 
     spreadsheet_id = feed.entry[0].id.text.rsplit('/',1)[1] 
     feed = gd_client.GetWorksheetsFeed(spreadsheet_id) 
     worksheet_id = feed.entry[0].id.text.rsplit('/',1)[1] 

     al1 = raw_input('Name1: ') 
     print al1 
     al2 = raw_input('Name2: ') 
     print al2 

     rows = gd_client.GetListFeed(spreadsheet_id, worksheet_id).entry 
     for row in rows: 
      for key in row.custom: 
       if al1 == row.custom[key].text: 
        print ' %s: %s' % (key, row.custom[key].text) 


    def onColorchanged(self, event): 
     self.__log('User wants color: %s'%self.colors[event.GetInt()]) 

    def onReferrerEntered(self, event): 
     self.__log('User entered referrer: %s'%event.GetString()) 

    def onSave(self,event): 
     self.__log('User clicked on button with id %d'%event.GetId()) 

    def onNameEntered(self, event): 
     self.__log('User entered name: %s'%event.GetString()) 

    def onNameChanged(self, event): 
     self.__log('User typed character: %d'%event.GetKeyCode()) 
     event.Skip() 

    def onInsuranceChanged(self, event): 
     self.__log('User wants insurance: %s'%bool(event.Checked())) 

    # Helper method(s): 

    def __log(self, message): 
     ''' Private method to append a string to the logger text 
      control. ''' 
     self.logger.AppendText('%s\n'%message) 




class FormWithSizer(Form): 
    def doLayout(self): 
     ''' Layout the controls by means of sizers. ''' 
     boxSizer = wx.BoxSizer(orient=wx.HORIZONTAL) 
     gridSizer = wx.FlexGridSizer(rows=5, cols=2, vgap=10, hgap=10) 

     # Prepare some reusable arguments for calling sizer.Add(): 
     expandOption = dict(flag=wx.EXPAND) 
     noOptions = dict() 
     emptySpace = ((0, 0), noOptions) 

     # Add the controls to the sizers: 
     for control, options in \ 
       [(self.nameLabel, noOptions), 
       (self.nameTextCtrl, expandOption), 
       (self.allomas2Label, noOptions), 
       (self.allomas2TextCtrl, expandOption), 
        emptySpace, 
       (self.saveButton, dict(flag=wx.ALIGN_CENTER))]: 
      gridSizer.Add(control, **options) 

     for control, options in \ 
       [(gridSizer, dict(border=5, flag=wx.ALL)), 
       (self.logger, dict(border=5, flag=wx.ALL|wx.EXPAND, 
        proportion=1))]: 
      boxSizer.Add(control, **options) 

     self.SetSizerAndFit(boxSizer) 


class FrameWithForms(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     super(FrameWithForms, self).__init__(*args, **kwargs) 
     notebook = wx.Notebook(self) 
     form2 = FormWithSizer(notebook) 
     notebook.AddPage(form2, 'CALTH') 
     self.SetClientSize(notebook.GetBestSize()) 


if __name__ == '__main__': 
    app = wx.App(0) 
    frame = FrameWithForms(None, title='Relevant title˝') 
    frame.Show() 
    app.MainLoop() 

再次謝謝!!!!!!!!!!!

回答

0

首先,確保你可以用Python下載你想要的數據。然後用一個按鈕創建一個wxPython GUI。在該按鈕的處理程序中,讓它調用可以下載所需數據的腳本。

如果這會導致您的GUI無響應,那麼您將需要使用一個線程來下載。我推薦以下相關文章,如果是這樣的話:

好了,現在你有數據下載適當。現在您添加一個網格小部件或一個listctrl /對象列表視圖小部件。選擇其中一個。我更喜歡對象列表視圖,您可以閱讀關於here的信息。然後在您的按鈕處理程序中,您可以調用您的下載程序腳本或線程,並在完成時,可以使用該數據加載小部件。如果您使用的是線程,那麼該線程將不得不調用下一步(即小部件加載位)。

現在你應該顯示你的數據。剩下的就是讓它看起來很漂亮,也許把下載部分放到一個菜單項中。

+0

非常感謝。我非常感謝你的回答,我的編碼已經取得了相對較快的進展。完成後我會在這裏發佈代碼。真的,謝謝麥克:) – Laci

相關問題