1

私の問題に答えることができるトピックを見逃さなかったと思います。次のタスクにひどくイライラして疲れているので、今ここにいます:-Drive.Googleに大量のデータを含むSpreasheetがあります-このspreeadsheetからデータをプルするwxPythonを使用してアプリケーションを作成したいと思います(可能な限り最も簡単な方法で)-素敵なインターフェース(パネル別名ウィンドウ)を介してこのアプリケーションにアクセスするユーザーから複数のデータを取得したい-ユーザーによって導入された複数のデータは、プルされたデータで作業できる必要がありますSpreasheetから。たとえば、ユーザーによって導入されたデータがスプレッドシートにあるかどうか、およびユーザーによって導入された次のデータを使用したその他の操作を確認します。

自分のやりたいことをはっきりと表現できたと思います。今、私はGoogle APIのPythonとwxPythonを初めて使用しますが、C ++、php、htmlの経験があります。私は今、Drive.Googleを発見し、PythonとwxPythonを学ぶことに2週間を費やしました。私はこれらのすべてのチュートリアルに従い、メモを取り、stackoverflowの質問のトーンを読みました-回答、wiki.wxpython.orgなど。私は毎日学び、今では多くのことを別々に行うことができますが、上記のようなすべての機能を持っていますどうすればいいのかわからなかった。少なくとも私をその方向に向けてください。Awfelは、例を挙げてどこにも行けないことに何時間も費やすことがよくあります。Python、wxPython拡張機能、GoogleAppEngine Launcher、さらには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()

ありがとうございました!!!!!!!!!!!

4

1 に答える 1

0

まず、Pythonだけで必要なデータをダウンロードできることを確認してください。次に、ボタン1つでwxPythonGUIを作成します。そのボタンのハンドラーで、必要なデータをダウンロードできるスクリプトを呼び出させます。

そのためにGUIが応答しなくなる場合は、スレッドを使用してダウンロードを行う必要があります。その場合は、次の記事をお勧めします。

これで、データが適切にダウンロードされました。次に、グリッドウィジェットまたはlistctrl/オブジェクトリストビューウィジェットを追加します。それらの1つを選んでください。ここで読むことができるオブジェクトリストビューが好きです。次に、ボタンハンドラーで、ダウンローダースクリプトまたはスレッドを呼び出すことができます。それが完了すると、ウィジェットにそのデータを読み込むことができます。スレッドを使用している場合、スレッドは次のステップ(つまり、ウィジェットのロードビット)を呼び出す必要があります。

これで、データが表示されます。残っているのは、見栄えを良くし、ダウンロード部分をメニュー項目に入れることだけです。

于 2012-12-03T15:34:21.693 に答える