wxPython,从TextCtrl框获取输入以发送到记事本

时间:2015-05-04 16:00:07

标签: python windows wxpython

我正在尝试为学校项目创建一个简单的发票计划。我有我的程序的基本布局。 左边的大文本框用于发票,右边的文本框用于输入的价格。

我希望文本框将输入返回到它们中,并将其指定为JobOne。下一步是我需要在“发送到发票”时将这些值发送到记事本中的文件。单击按钮。 我真的被困在这里,我已经尝试了很多不同的组合,我永远得到了" TextCtrl"对象不可调用。 任何帮助将不胜感激。 我已经把我的问题弄得一团糟,把问题解决了,并把它剥离了。“/ p>

    import wx

class windowClass(wx.Frame):

def __init__(self, *args, **kwargs):
    super(windowClass, self).__init__(*args, **kwargs)

    self.basicGUI()

def basicGUI(self):

    panel = wx.Panel(self)   
    self.SetSizeWH(1200, 800)
    menuBar = wx.MenuBar()
    fileButton = wx.Menu()
    exitItem = fileButton.Append(wx.ID_EXIT, 'Exit', 'status msg...')
    menuBar.Append(fileButton, 'File')
    self.SetMenuBar(menuBar)
    self.Bind(wx.EVT_MENU, self.Quit, exitItem)





    yesNoBox = wx.MessageDialog(None, 'Do you wish to create a new invoice?',
                                'Create New Invoice?', wx.YES_NO)
    yesNoAnswer = yesNoBox.ShowModal()
    yesNoBox.Destroy()



    nameBox = wx.TextEntryDialog(None, 'What is the name of the customer?', 'Customer Name'
                                 , 'Customer Name')

    if nameBox.ShowModal() ==wx.ID_OK:
        CustomerName = nameBox.GetValue()



   wx.TextCtrl(panel, pos=(10, 10), size=(500,100))



    wx.TextCtrl(panel, pos=(550, 10), size=(60,20))




    wx.TextCtrl(panel, pos=(10, 200), size=(500,100))

    wx.TextCtrl(panel, pos=(550, 200), size=(60,20))





    wx.TextCtrl(panel, pos=(10, 400), size=(500,100))


    wx.TextCtrl(panel, pos=(550, 400), size=(60,20))



    self.SetTitle('Invoice For ' +CustomerName)  


    SendToNotepadButton = wx.Button(panel, label='Convert to invoice',pos=(650, 600), size=(120, 80))
    def SendToNotepad(e):
        f = open("Notepad.exe", 'w')
        f.write(())
        call(["Notepad.exe", "CustomerInvoice"])



    self.Bind(wx.EVT_BUTTON, SendToNotepad)                                                                                           
    self.Show(True)



def Quit(self, e):
    self.Close()


def main():
app = wx.App()
windowClass(None)

app.MainLoop()

main()

如果你设法帮助我,我感谢你!

1 个答案:

答案 0 :(得分:0)

这实际上相当容易。我跳过MessageDialog的东西,只是把概念证明放在一起。这对我来说在我的Windows 7盒子上使用Python 2.7和wxPython 3.0.2:

import subprocess
import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.txt = wx.TextCtrl(self)
        notepad_btn = wx.Button(self, label="Send to Invoice")
        notepad_btn.Bind(wx.EVT_BUTTON, self.onSendInvoice)

        my_sizer = wx.BoxSizer(wx.VERTICAL)
        my_sizer.Add(self.txt, 0, wx.EXPAND|wx.ALL, 5)
        my_sizer.Add(notepad_btn, 0, wx.CENTER|wx.ALL, 5)
        self.SetSizer(my_sizer)

    #----------------------------------------------------------------------
    def onSendInvoice(self, event):
        """"""
        txt = self.txt.GetValue()
        print txt

        # write to file
        with open("invoice.txt", 'w') as fobj:
            fobj.write(txt)

        # open Notepad
        subprocess.Popen(['notepad.exe', 'invoice.txt'])


########################################################################
class MainWindow(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Jobs")
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainWindow()
    app.MainLoop()

希望这段代码可以帮助您了解如何将它们放在一起。