Work

tksheetで値の入力と取得-tkinter-

猫 パソコン

tkinterで使える外部ライブラリのtksheetが思いのほか便利なので紹介します。全然日本語の説明がないんですよね。

tksheetで表を作って値を入れる

表を作るところまでは別の記事で紹介していますのでそちらをご確認ください。

さて、公式ドキュメントによればシートに値を入れるコードは下記のようになります。

  1. set_sheet_data(data = [[]],
  2.                reset_col_positions = True,
  3.                reset_row_positions = True,
  4.                redraw = True,
  5.                verify = False,
  6.                reset_highlights = False)
色々オプションがありますが、引数のdataにネストされたリストを入れれば値が入るということになります。簡単なコードを作りましたのでそちらで確認してみましょう。
  1. from tksheet import Sheet
  2. import tkinter as tk
  3. class sheetapp():
  4.     def __init__(self,frame) -> None:
  5.         self.frame = frame
  6.         self.sheet = Sheet(
  7.             self.frame,
  8.             )
  9.         self.sheet.enable_bindings()
  10.         self.sheet.pack()
  11.     def set_value(self):
  12.         datalist = [
  13.             [“a1”,“b1”,“c1”],
  14.             [“a2”,“b2”,“c2”],
  15.             [“a3”,“b3”,“c3”],
  16.         ]
  17.         self.sheet.set_sheet_data(data = datalist)
  18. class btns():
  19.     def __init__(self,frame) -> None:
  20.         self.frame = frame
  21.         self.btn1 = tk.Button(self.frame,text=“btn1”)
  22.         self.btn2 = tk.Button(self.frame,text=“btn2”)
  23.         self.btn3 = tk.Button(self.frame,text=“btn3”)
  24.         self.btn4 = tk.Button(self.frame,text=“btn4”)
  25.         self.btn1.pack()
  26.         self.btn2.pack()
  27.         self.btn3.pack()
  28.         self.btn4.pack()
  29. app = tk.Tk()
  30. frame1 = tk.Frame(app)
  31. frame2 = tk.Frame(app)
  32. sheet = sheetapp(frame = frame1)
  33. buttons = btns(frame=frame2)
  34. buttons.frame.pack(side=tk.LEFT)
  35. sheet.frame.pack(side=tk.RIGHT)
  36. buttons.btn1.config(command=sheet.set_value)
  37. app.mainloop()

こんな感じでと何もデータがないsheetが表示されます。

btn1に値を入れる機能をバインドしていますので、クリックしてみてください。

図のように値が入ったと思います。

tksheetから値を取得する

公式ドキュメントでは以下の様になっています。

  1. get_sheet_data(return_copy = False, get_header = False, get_index = False)

オプションを省いた状態でボタンを追加したコードが下記になります。

  1. from tksheet import Sheet
  2. import tkinter as tk
  3. class sheetapp():
  4.     def __init__(self,frame) -> None:
  5.         self.frame = frame
  6.         self.sheet = Sheet(
  7.             self.frame,
  8.             #data=[[f“Row {r}, Column {c}\nnewline1\nnewline2” for c in range(10)] for r in range(20)]
  9.             )
  10.         self.sheet.enable_bindings()
  11.         self.sheet.pack()
  12.     def set_value(self):
  13.         datalist = [
  14.             [“a1”,“b1”,“c1”],
  15.             [“a2”,“b2”,“c2”],
  16.             [“a3”,“b3”,“c3”],
  17.         ]
  18.         self.sheet.set_sheet_data(data = datalist)
  19.     def get_values(self):
  20.         data = self.sheet.get_sheet_data()
  21.         print(data)
  22. class btns():
  23.     def __init__(self,frame) -> None:
  24.         self.frame = frame
  25.         self.btn1 = tk.Button(self.frame,text=“btn1”)
  26.         self.btn2 = tk.Button(self.frame,text=“btn2”)
  27.         self.btn3 = tk.Button(self.frame,text=“btn3”)
  28.         self.btn4 = tk.Button(self.frame,text=“btn4”)
  29.         self.btn1.pack()
  30.         self.btn2.pack()
  31.         self.btn3.pack()
  32.         self.btn4.pack()
  33. app = tk.Tk()
  34. frame1 = tk.Frame(app)
  35. frame2 = tk.Frame(app)
  36. sheet = sheetapp(frame = frame1)
  37. buttons = btns(frame=frame2)
  38. buttons.frame.pack(side=tk.LEFT)
  39. sheet.frame.pack(side=tk.RIGHT)
  40. buttons.btn1.config(command=sheet.set_value)
  41. buttons.btn2.config(command=sheet.get_values)
  42. app.mainloop()

btn1を押した後にbtn2を押すと、下記の様にsheet内のデータを取得できたと思います。

  1. [[‘a1’, ‘b1’, ‘c1’], [‘a2’, ‘b2’, ‘c2’], [‘a3’, ‘b3’, ‘c3’]]

次回はセルごとのデータ入出力を説明します。