показать pandastable с начальным фокусом на конкретной строке - PullRequest
0 голосов
/ 30 октября 2019
from tkinter import *
from pandastable import Table, TableModel

class TestApp(Frame):
        """Basic test frame for the table"""
        def __init__(self, parent=None):
            self.parent = parent
            Frame.__init__(self)
            self.main = self.master
            self.main.geometry('600x400+200+100')
            self.main.title('Table app')
            f = Frame(self.main)
            f.pack(fill=BOTH,expand=1)
            df = TableModel.getSampleData()
            self.table = pt = Table(f, dataframe=df,
                                    showtoolbar=True, showstatusbar=True)
            pt.show()
            pt.movetoSelection(row = 23, col=1)
            return

app = TestApp()
app.mainloop()

Я хочу показать pd.df, используя pandastable library, и мне нужно, чтобы изначально сфокусированная строка была на один шаг внизу df, а таблица прокручивалась вниз на этой строке. на его чертеже.

Я нашел (наиболее вероятно) соответствующий метод, который должен быть movetoSelection(row=None, col=0, idx=None, offset=0), а описание в library документации довольно ограничено "Переместить вконкретная строка / столбец, обновляемая таблица ", которая, тем не менее, должна делать свою работу.

Я звоню method с pt.movetoSelection(row = 23, col=1), потому что я нашел аналогичное использование на странице github *1018* (строка сценария 1272): table.movetoSelection(row=i,col=j,offset=3). К сожалению, это приводит к ошибке:

Traceback (most recent call last):
  File "C:\Users\svobodov\Desktop\data\tests\print_df_in_window\2. pandastable\0.2 return marked lines\test.py", line 21, in <module>
    app = TestApp()
  File "C:\Users\svobodov\Desktop\data\tests\print_df_in_window\2. pandastable\0.2 return marked lines\test.py", line 18, in __init__
    pt.movetoSelection(row = 23, col=1)
  File "C:\Python35\lib\site-packages\pandastable\core.py", line 2397, in movetoSelection
    self.drawSelectedRow()
  File "C:\Python35\lib\site-packages\pandastable\core.py", line 3297, in drawSelectedRow
    x1,y1,x2,y2 = self.getCellCoords(row,0)
  File "C:\Python35\lib\site-packages\pandastable\core.py", line 2067, in getCellCoords
    x1=self.col_positions[col]
IndexError: list index out of range

Я посмотрел исходные сценарии и определение метода в core.py, и, выполнив некоторые печати, я обнаружил, что self.col_positions - это пустое listно я не могу понять, почему это так.

Чтобы описать текущее поведение в стороне от сообщения об ошибке, при запуске сценария данная строка выделяется / выделяется, но фокус не опускается до этой строки, то есть верхней, а не нижней строкитаблица появляется.

Пример взят из library документов , добавлена ​​только строка с pt.movetoSelection(row = 23, col=1).

1 Ответ

0 голосов
/ 30 октября 2019

По словам автора библиотеки после открытия проблемы на github, это незначительная ошибка, но обходной путь - redraw table непосредственно перед вызовом movetoSelection, поэтому:

pt.show()
pt.redraw()
pt.movetoSelection(row = yourDesiredRowIdx, col=yourDesiredColIdx)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...