Скопировать и вставить из Python wx.Grid
Мне интересно, может ли кто-нибудь помочь? У меня есть форма, которая разделена на две панели. LeftP, который имеет мои элементы управления, и rightP, который имеет сетку. Я пытаюсь скопировать / вставить из сетки в буфер обмена. С помощью следующего кода я получаю сообщение об ошибке:
AttributeError: у объекта 'RightPanel' нет атрибута 'grid'.
Я следую тому же формату, который я использую для 'LeftPanel', который, кажется, работает. Какие-нибудь мысли?
import wx
import wx.grid as gridlib
import pyodbc
import sys,os
import csv
class RightPanel(wx.Panel):
""""""
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent=parent)
self.SetBackgroundColour("light blue")
def LoadData(self, connstr, query, table):
grid = gridlib.Grid(self)
grid.CreateGrid(20,20)
con = pyodbc.connect(connstr)
cur = con.cursor()
# rest of Grid code here
class LeftPanel(wx.Panel):
""""""
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent=parent)
# rest of Left Panel code here
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "DB Viewer", size=(1150, 450))
splitter = wx.SplitterWindow(self)
self.leftP = LeftPanel(splitter)
self.rightP = RightPanel(splitter)
splitter.SplitVertically(self.leftP, self.rightP)
splitter.SetMinimumPaneSize(20)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(splitter, 1, wx.EXPAND)
self.SetSizer(sizer)
self.rightP.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK, self.copy)
self.Layout()
def copy(self, event):
print "Copy method"
# Number of rows and cols
rows = self.rightP.grid.GetSelectionBlockBottomRight()[0][0] - self.rightP.grid.GetSelectionBlockTopLeft()[0][0] + 1
cols = self.rightP.grid.GetSelectionBlockBottomRight()[0][1] - self.rightP.grid.GetSelectionBlockTopLeft()[0][1] + 1
#This is where it throws an error####################
#Rest of copy Code goes Here
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
1 ответ
Решение
Вам нужно установить grid как переменную экземпляра, поставив "self". напротив, в данный момент сетка является просто локальной переменной
Также вам нужно будет вызвать метод loaddata до того, как вы создадите сетку и сохраните ее как переменную экземпляра.