実現したいこと
pythonのtksheetのextra_bindings("begin_move_rows")の使用方法
発生している問題・分からないこと
pythonのライブラリーtksheetのextra_bindingsで"begin_move_rows"を設定しましたが機能しません。
具体的には、下記コードを実行し表の中で行移動してもmessagebox.showerror("","begin_move_rows")のメッセージ表示がされません。他の関数はメッセージ表示が有ります。機能させる方法をご教授ください。又この機能は行移動前/行移動後のどちらで動作するのでしょうか?
尚、下記コードはhttps://github.com/ragardner/tksheet/wiki/Version-7#about-tksheetに記されたものに、"begin_move_rows"関連部分のみ書き加えたものです。
該当のソースコード
from tksheet import Sheet import tkinter as tk from tkinter import messagebox class demo(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.grid_columnconfigure(0, weight=1) self.grid_rowconfigure(0, weight=1) self.frame = tk.Frame(self) self.frame.grid_columnconfigure(0, weight=1) self.frame.grid_rowconfigure(0, weight=1) self.sheet = Sheet(self.frame, data=[[f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(50)] for r in range(500)]) self.sheet.enable_bindings() # 下記の1行のみオリジナルに書き加えた self.sheet.extra_bindings("begin_move_rows", self.begin_move_rows) self.sheet.extra_bindings("begin_edit_cell", self.begin_edit_cell) self.sheet.edit_validation(self.validate_edits) self.sheet.popup_menu_add_command("Say Hello", self.new_right_click_button) self.frame.grid(row=0, column=0, sticky="nswe") self.sheet.grid(row=0, column=0, sticky="nswe") # オリジナルに加えたコード部 def begin_move_rows(self, event=None): messagebox.showerror("","begin_move_rows") def new_right_click_button(self, event=None): messagebox.showerror("","new_right_click_button") print ("Hello World!") def begin_edit_cell(self, event=None): messagebox.showerror("","begin_edit_cell") return event.value def validate_edits(self, event): # remove spaces from any cell edits, including paste messagebox.showerror("","begin_edit_cell") if isinstance(event.value, str) and event.value: return event.value.replace(" ", "") app = demo() app.mainloop()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
コード行のself.sheet.extra_bindings("begin_move_rows", self.begin_move_rows)の"begin_move_rows"部分を"move_rows"に下記の様に変更しても実行されず、メッセージ表示はありません。変更後コード self.sheet.extra_bindings("move_rows", self.begin_move_rows)
補足
特になし
コードをそのままコピペしてこちらで実行し、行を選択して移動しようとすると、ちゃんとbegin_move_rowsのダイアログが表示されました。
質問のコードはどのように実行していますか?
行の移動はどのように実行しようとしていますか。
Python 3.10.11
tksheet-7.2.12
TakaiYさんコメントありがとうございます。
私の実行環境はpython 3.12.4、tksheet 7.2.12、エディターにvscodeを使用しこの中で「デバッグの実行」を行っています。
「行移動方法」フォーム画面表示後
(1)任意セルをマウス左クリックで選択⇒他のセルをマウス左クリックで選択
(2)任意セルをマウス左クリックで選択⇒PCの↓又は↑ボタンクリックで移動
この2種の移動操作で両者ともメッセージ表示無しです。
本日、再確認しましたが質問時と同状態で行移動のみメッセージ無しです。
そうでしたか。 でも、その操作は行の移動ではありませんね。
行の移動はその名の通り「行そのものの移動」で、行を選択(行番号のところと左クリック)して、その行番号をドラッグして移動する操作です。 これをやると行そのものが移動します。
試してみることはできますか。
TakaiYさんコメントありがとうございます。
確かに、ご指摘の操作をするとメッセージ表示が出ます。この様な操作が対象とは思いませんでした。
私の希望は、単純に表中の行を移動した場合にエベントを発生させたいと思っています。このトリガーとなる書式はどのようなものでしょうか?tksheetにての知見が有ればご教授ください。
tksheetはネットでの情報が少なく初心者で苦労しています。他にエクセル風な操作が可能なモジュールが有れば紹介ください。

回答1件
あなたの回答
tips
プレビュー