4

質問

  1. ScrolledTextTkinter のウィジェットの特定の行の正当化を変更するにはどうすればよいですか?
  2. 元のエラーの理由は何ですか?

バックグラウンド

私は現在、Tkinter テキスト ボックス アプリケーションに取り組んでおり、行の両端揃えを変更する方法を探しています。最終的には、特定の行をLEFT ALIGNからRIGHT ALIGNなどに変更できるようにしたいと考えています。今のところ、テキスト ボックス全体の位置合わせを変更する方法を見つける必要がありますが、さらに助けていただければ幸いです。私は Effbot.org を使用して、探求を支援してきました。ScrolledTextウィジェットのコードは次のとおりです。

コード

def mainTextFUN(self):
    self.maintextFrame = Frame (root, width = 50, height = 1,
                           )

    self.maintextFrame.grid(row = 1, column = 1, sticky = N, columnspan = 1,
                            rowspan = 1)

    self.write = ScrolledText(self.maintextFrame,
                              justify(CENTER),
                              width = 100, height = 35, relief = SUNKEN,
                              undo = True, wrap = WORD,
                              font = ("Times New Roman",12),
                              )
    self.write.pack()

これを実行すると、エラーが発生します。

Traceback (most recent call last):
  File "D:\Python Programs\Text Editor\MyTextv5.py", line 132, in <module>
    app = Application(root)
  File "D:\Python Programs\Text Editor\MyTextv5.py", line 16, in __init__
    self.mainTextFUN()
File "D:\Python Programs\Text Editor\MyTextv5.py", line 57, in mainTextFUN
justify(CENTER),
NameError: global name 'justify' is not defined
>>> 

justify引数を引数の後に変更するfontと、メッセージ ボックスの形式で別のエラーが表示されます。

There's an error in your program:
*** non-keyword arg after keyword arg (MyTextv5.py, line 61)

編集

abarnert の提案に基づいてコードを変更しました。justify = CENTER,の後に追加しましたself.maintextFrame。それにもかかわらず、別のエラーが発生しました。

Traceback (most recent call last):
  File "D:\Python Programs\Text Editor\MyTextv5.py", line 132, in <module>
    app = Application(root)
  File "D:\Python Programs\Text Editor\MyTextv5.py", line 16, in __init__
    self.mainTextFUN()
  File "D:\Python Programs\Text Editor\MyTextv5.py", line 60, in mainTextFUN
    font = ("Times New Roman",12),
  File "C:\Python27\lib\lib-tk\ScrolledText.py", line 26, in __init__
    Text.__init__(self, self.frame, **kw)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 2827, in __init__
    Widget.__init__(self, master, 'text', cnf, kw)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1974, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
TclError: unknown option "-justify"
4

4 に答える 4

13

という名前のオプションを使用していますjustifyが、テキスト ウィジェットにはそのようなオプションがありません。justify有効なオプションであると書かれたドキュメントをどこかで読んでいますか? もしそうなら、そのドキュメントを読むのをやめる必要があります。

ただし、justifyテキスト タグのオプションがあります。正当な理由を持つようにタグを構成し、そのタグを 1 つ以上の行に適用できます。私はScrolledTextウィジェットを使用したことがないので、プレーン テキスト ウィジェットと同じメソッドがあるかどうかはわかりませんが、プレーン テキスト ウィジェットを使用すると、次のようになります。

t = tk.Text(...)
t.tag_configure("center", justify='center')
t.tag_add("center", 1.0, "end")

上記の例では、「center」という名前のタグを作成して構成しています。タグには任意の名前を付けることができます。「center」タグについては、「center」の正当化を行い、そのタグをウィジェット内のすべてのテキストに適用します。

メソッドの引数を調整することで、個々の行にタグを付けることができますtag_add。メソッドを使用してテキストを挿入するときに、タグのリストを指定することもできますinsert

于 2013-02-22T03:10:37.317 に答える
5

justify=CENTERウィジェットの設定が失敗する理由は簡単に理解Textできます。ウィジェットにはそのようなオプションはありません。

必要なのは、パラメーターを使用してタグを作成することですjustify。次に、そのタグを使用してテキストを挿入できます (または、任意のテキストを挿入して、後でそのタグを特定の領域に適用できます)。

import Tkinter

root = Tkinter.Tk()
text_widget = Tkinter.Text()
text_widget.pack(fill='both', expand=True)

text_widget.tag_configure('tag-center', justify='center')
text_widget.insert('end', 'text ' * 10, 'tag-center')

root.mainloop()
于 2013-02-22T03:06:34.627 に答える
2

問題は Python 構文であり、関連するものではありませんtkinter:

self.write = ScrolledText(self.maintextFrame,
                          justify(CENTER),
                          width = 100, height = 35, relief = SUNKEN,

justifyそれは valueでキーワード引数を渡す方法ではありませんCENTER。value で位置引数を渡していますjustify(CENTER)。そのため、Python はjustify(CENTER)という名前の関数を探して計算を試みjustifyますが、見つからず、NameError.

移動しても意味がありません。キーワード argument の後に位置引数があり、それが許可されていないため、 に到達するSyntaxError前に を取得することを意味するだけです。NameErrorjustify(CENTER)font

これを行う正しい方法は、次の行で他のすべてのキーワード引数を渡すのと同じ方法です。

self.write = ScrolledText(self.maintextFrame,
                          justify = CENTER,
                          width = 100, height = 35, relief = SUNKEN,

ちなみに、両端揃えをCENTERに変更しても、左揃えから右揃えに変更されることはありません。左揃えから中央揃えに変更されます。本当に欲しくなかったのですRIGHTか?


構文の問題を修正すると、tkinterに関連する新しい問題が発生します。クラスはそのScrolledTextキーワード パラメータをクラスに渡すだけTextで、ウィジェットにはパラメータTextがありません。justify

docsを読むjustifyと、ウィジェットではなく、テキストの範囲に関連付けられたタグとして使用されます。そのためtag_configjustifyプロパティを使用して名前付きタグ構成を作成する必要があり、例が示すように、ウィジェット内のテキストの範囲に適用できます。そう:

self.write.tag_config('justified', justify=RIGHT)
self.write.insert(INSERT, 'Ancients of Mu-Mu', 'justified')

もちろん、これはあなたの他の質問に直接答えます:

Tkinter の ScrolledText ウィジェットで特定の行の正当化を変更するにはどうすればよいですか?

最初に適切なタグを付けて挿入するか、後でそれらを選択してタグを適用します。

于 2013-02-22T00:57:15.250 に答える