【问题标题】:how entrer value in new window and passing values of wx.newindow to wx.Frame wxpython如何在新窗口中输入值并将 wx.newindow 的值传递给 wx.Frame wxpython
【发布时间】:2019-08-01 13:04:37
【问题描述】:

我有一个带有动态按钮的面板,当我点击按钮时,我有一个新窗口打开了我需要区域输入值来编辑动态图像参数的问题:

我的代码:

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()

如何添加区域以编辑图片等参数? 我不确定新窗口是我需要的还是对话框!!

感谢帮助

【问题讨论】:

    标签: dialog window wxpython python-3.6


    【解决方案1】:

    我想你会用一个普通的新窗口没问题。您可以使用wx.TextCtrl 小部件获取区域以写入参数。您将需要一种方法来导出输入到wx.TextCtrl 中的值,所以我添加了样式wx.TE_PROCESS_ENTER。使用此样式,当您完成输入并按 Enter 后,您可以处理输入的值。

    另外,不需要使用Show() 两次(secondWindow.Show()self.Show())。一个就够了。

    带有 cmets 的代码:

    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()
    

    【讨论】:

    • 谢谢你,我需要你对 wxpython 中的 matplotlib 有什么想法吗?
    • @SarahTohami 有点。你需要什么?
    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2010-10-06
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多