私はTkinterのためのカスタム"Table Widget"
を作りたいとこれまでのところ、それは私が欲しいほとんどようです。
私が持っている問題は、テーブルを"Labels"
で構成したいということです。ラベルを更新するために"StringVar()'s"
を使用する必要があることがわかりました。
私は実際に1000個の変数を1000個のラベルにしたくないので、今週この問題を解決しようとしました。私が見つけた唯一の解決策は、"Dicts"
を使用することですが、私はこれを行うには良い方法だと思いませんか?私は間違っているかもしれないが、それはこのような何かを行う方法である必要がありますようにそれは感じている:
myLabel = Label(root, text='myText')
myLabel.pack()
myLabel.setText('new text')
現在のウィジェットのコードは、この(This is my first custom widget so if this is horribly wrong or wrong in any way, please tell me)
ソース
"""
Description:
A TABLE WIDGET Extension for Tkinter
"""
try:
#Python 3.X
import tkinter #this is quite annoyng, without it (tkinter) wont be available....
from tkinter import * # even with this
from tkinter import ttk
from tkinter.ttk import *
except ImportError:
#python 2.X
import tkinter
from Tkinter import *
from Tkinter import ttk
from Tkinter.ttk import *
class ETable(tkinter.Frame):
def __init__(self, parent, *args, **kwargs):
tkinter.Frame.__init__(self, parent)
self.init_table(parent, *args, **kwargs)
def init_table(self, parent, *args, **kwargs):
row_settings = {
'anchor': CENTER,
'background': '#C5FFFF',
'bitmap': None,
'borderwidth': 5,
'compound': None,
'cursor': None,
'font': None,
'foreground': '#000000',
'image': None,
'relief': FLAT,
'rows': 1,
'state': NORMAL,
'text': None,
'textvariable': None,
'underline': -1,
'width': 20,
}
for kwarg in kwargs:
if kwarg in row_settings:
row_settings[kwarg] = kwargs[kwarg]
self.table_rows = self.init_row(parent, *args, **row_settings)
def init_row(self, parent, *args, **kwargs):
text_list = kwargs.pop('text')
row_list = []
cols = []
rows = kwargs.pop('rows')
for row in range(rows):
for col in range(len(text_list)):
tempLabel = Label(parent, text = text_list[col], *args, **kwargs)
tempLabel.grid(row=row, column=col)
cols.append(tempLabel)
row_list.append(cols)
return row_list
のように見えます目標
このようなことをしたいです。
table.getRow[0][0].setText('new text') #This would change col 1 in row 1 to "new text"
ボーナス質問
(please tell me if I should make a new question for this)
私は、ユーザーがクリックしたときに、私はTkinterのため"Table Widget"
を作りたいが、私は、テーブルに振る舞いを追加したい、IE、言ったように列を編集するには"Entry or Text boxes"
を追加することが目的です。
ここでの質問はTkinterで可能ですか?
ああ、誰もが、私はこの前に検索しているうん、頼むこれに似た「stackoverflowの」質問がありますが、私は、カスタムウィジェットを作成するためのインスピレーションを得たところではない、かなり、thatsの。前に – Estrobeda
私は答えを追加しました、あなたがそれを好きであることを願っています。あなたの2番目の質問に関するいくつかの情報については、ブライアンの答え[ここ](http://stackoverflow.com/q/10267465/4014959)と[リンクされた質問](http://stackoverflow.com/q/3819354/4014959 )。ウィジェットの行全体を一度に操作するには、各行をそれぞれのフレームに入れることを検討してください。 –