0

私はこのpythonコードをwxpythonで私の問題を持ってい ます。私は最後のwxpythonをPython 2.7で使用しています。

コメント付きのコードを使用し、さらにパネルを使用してグリッドを表示したい場合はどうすればよいですか?

いろいろやってみたのですが、どうにもなりません。問題は、アプリケーションがクラッシュするか、正しく表示されないことです。

import wx
import wx.grid as gridlib
class MyGrid(gridlib.Grid):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        gridlib.Grid.__init__(self, parent)
        self.CreateGrid(2, 3)


        # test all the events

//Code for events

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

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, parent=None, title="An Eventful Grid",size=(700,700))
        p = wx.Panel(self)

        # IF I UNCOMMNT THIS ,IT DOESNT LOADS THE WINDOW OR GRID APPEARS CORRUPTED
        #self.panel = p1 = wx.Panel(self,pos=(0,200),size=(100,100))
        #button2 = wx.Button(p1, -1, label="click me")
        #wx.StaticText(p, -1,"Right-click on the panel to show a popup menu",(100,100))
        #self.panel = p2 = wx.Panel(self,pos=(200,200),size=(400,200))
        myGrid = MyGrid(p)


        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(myGrid, 1, wx.EXPAND)#,pos=(200,200)
        #sizer.Add(p2, 2, wx.EXPAND)
        p.SetSizer(sizer)

if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()
4

1 に答える 1

1

コードを編集して機能させました。出力とコードは次のとおりです。

ここに画像の説明を入力

import wx
import wx.grid as gridlib
class MyGrid(gridlib.Grid):
    def __init__(self, parent):
        """Constructor"""
        gridlib.Grid.__init__(self, parent)
        self.CreateGrid(2, 3)

class MyForm(wx.Frame):
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, parent=None, title="An Eventful Grid",size=(700,700))
        p = wx.Panel(self)

        button2 = wx.Button(p, -1, label="click me")
        st = wx.StaticText(p, -1,"Right-click on the panel to show a popup menu")
        p2 = wx.Panel(p, size=(400,200))
        p2.SetBackgroundColour((100, 0, 0))
        myGrid = MyGrid(p)


        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(button2)
        sizer.Add(st)
        sizer.Add(myGrid, 1, wx.EXPAND)#,pos=(200,200)
        sizer.Add(p2, 2, wx.EXPAND)
        p.SetSizer(sizer)

if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

あなたが何をしようとしているのかを正確に推測するのに時間をかけなかったので、これがうまくいくことを願っています.

オリジナルで問題だったいくつかのこと:

1) 絶対位置とサイズをサイザーと組み合わせることはお勧めできません。どちらか一方(できればサイザー)に固執してください。

2) 相反する配置と親がたくさんいた。たとえば、パネルpはフレーム (つまり p = wx.Panel(self...) に配置され、次に別のフレーム (つまり ) に配置されましたp1 = wx.Panel(self,...が、これらをサイザーに追加する方法を説明していませんでした。まず、すべてに独自のパネルが必要なわけではないので、ボタンを直接追加しました。さらに重要なことは、すべてをサイザーに追加し、適切な親の設定と一貫性を保つ必要があることです。

たとえば、ボタンと静的テキストを独自のパネル (たとえば、p を親とする p5) に入れたい場合は、パネルを作成し、ボタンと静的テキストを追加してから、パネル p5 を追加することで実現できます。サイザーへ。

于 2013-08-25T04:29:43.813 に答える