簡體   English   中英

如何在新窗口中輸入值並將wx.newindow的值傳遞給wx.Frame wxpython

[英]how entrer value in new window and passing values of wx.newindow to wx.Frame wxpython

我有一個帶有動態按鈕的面板,當我單擊按鈕時,我有一個新窗口打開了一個問題,我需要區域輸入值來編輯動態圖像的參數,如下所示:

那我的代碼:

import wx

class MainFrame(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self,parent,title="Myfirst",size=(800,580))
        self.top = wx.Panel(self, style = wx.SUNKEN_BORDER)
        self.bottom = wx.Panel(self ,style = wx.SUNKEN_BORDER)
        self.left = wx.Panel(self ,style = wx.SUNKEN_BORDER, size = (250,-1))
        st1 = wx.StaticText(self.bottom, -1, "show info ")
        self.bottom.SetBackgroundColour('white')
        dynamic=wx.Button(self.left,-1,"Dynamique",size=(110,30),pos=(50,100))
        self.Bind(wx.EVT_BUTTON, self.newwindow, dynamic)
        sizer1 = wx.BoxSizer(wx.VERTICAL)
        sizer1.Add(self.top,1,wx.EXPAND,5)
        sizer1.Add(self.bottom,1,wx.EXPAND,5)

        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2.Add(self.left,0,wx.EXPAND,5)
        sizer2.Add(sizer1,1,wx.EXPAND,5)
        self.SetSizer(sizer2)

    def newwindow(self, event):
        secondWindow = window2(parent=self.left)
        secondWindow.Show()

class window2(wx.Frame):

    title = "new Window"

    def __init__(self,parent):
        wx.Frame.__init__(self,parent, -1,'Dynamic of image', size=(300,100))
        panel=wx.Panel(self, -1)

        self.SetBackgroundColour(wx.Colour(100,100,100))
        self.Centre()
        self.Show()

app = wx.App()
frame=MainFrame(None).Show()
app.MainLoop()

如何添加區域以編輯圖片等參數? 我不確定如果我需要newwindow或對話框!

感謝幫助

我想您只要使用正常的新窗口就可以了。 您可以使用wx.TextCtrl小部件獲得區域來寫入參數。 您將需要一種將鍵入的值導出到wx.TextCtrl因此我添加了樣式wx.TE_PROCESS_ENTER 使用這種樣式,當您完成鍵入並按Enter時,可以處理鍵入的值。

同樣,也不需要兩次使用Show()secondWindow.Show()self.Show() )。 其中之一就足夠了。

帶有注釋的代碼:

import wx

class MainFrame(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self,parent,title="Myfirst",size=(800,580))
        self.top = wx.Panel(self, style = wx.SUNKEN_BORDER)
        self.bottom = wx.Panel(self ,style = wx.SUNKEN_BORDER)
        self.left = wx.Panel(self ,style = wx.SUNKEN_BORDER, size = (250,-1))
        st1 = wx.StaticText(self.bottom, -1, "show info ")
        self.bottom.SetBackgroundColour('white')
        dynamic=wx.Button(self.left,-1,"Dynamique",size=(110,30),pos=(50,100))
        self.Bind(wx.EVT_BUTTON, self.newwindow, dynamic)
        sizer1 = wx.BoxSizer(wx.VERTICAL)
        sizer1.Add(self.top,1,wx.EXPAND,5)
        sizer1.Add(self.bottom,1,wx.EXPAND,5)

        sizer2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer2.Add(self.left,0,wx.EXPAND,5)
        sizer2.Add(sizer1,1,wx.EXPAND,5)
        self.SetSizer(sizer2)

    def newwindow(self, event):
        secondWindow = window2(parent=self.left)
        secondWindow.Show()

class window2(wx.Frame):

    title = "new Window"

    def __init__(self,parent):
        """
        This is similar to the class MainFrame. You define a parent wx.Panel
        and all other widgets are his childs. 
        """
        wx.Frame.__init__(self,parent, -1,'Dynamic of image', size=(300,100))
        self.panel=wx.Panel(self, -1, style=wx.SUNKEN_BORDER)

        self.st = wx.StaticText(self.panel, label='modifier bornes de la dynamique', style=wx.ALIGN_CENTER)
        #### Notice the wx.TE_PROCESS_ENTER style to trigger processing the input when
        #### Enter is pressed. Another alternative is to put a button somewhere.
        self.text = wx.TextCtrl(self.panel, size=(200, 20), style=wx.SUNKEN_BORDER|wx.TE_PROCESS_ENTER)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.st, 0, wx.EXPAND|wx.ALL, 5)
        self.sizer.Add(self.text, 0, wx.ALIGN_CENTER|wx.ALL, 5)

        self.panel.SetSizer(self.sizer)
        self.sizer.Fit(self.panel)

        #self.SetBackgroundColour(wx.Colour(100,100,100))
        self.Centre()
        #### No need to use Show() here since you already use it in MainFrame.newwindow()
        self.Show()
        #### To execute self.onEnter when Enter is pressed inside self.text
        self.Bind(wx.EVT_TEXT_ENTER, self.onEnter)

    def onEnter(self, event):
        #### Change it to fit your needs
        print(self.text.GetValue())
        self.Destroy()

app = wx.App()
frame=MainFrame(None).Show()
app.MainLoop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM