2

Python 2.7 で Tkinter を使用した簡単なクイズ アプリの GUI に取り組んでいます。これまでのところ、フレームのセットアップを開始しました。results_txtbx各質問に対するプレーヤーのパフォーマンスを示すリストを上下にスクロールするという名前の Text ウィジェット内にスクロールバーを配置しました。grid扱いやすいのでずっと使っています。

from Tkinter import *

class Q_and_A:

    def __init__(self, master):
        frame = Frame(master)

        Label(master).grid(row = 4)

        results_txtbx = Text(master)
        results_scrbr = Scrollbar(results_txtbx)
        results_scrbr.grid(sticky = NS + E)

        results_txtbx.config(width = 20, height = 4, wrap = NONE, yscrollcommand = results_scrbr.set)
        results_txtbx.grid(row = 3, column = 1, padx = 12, sticky = W)



root = Tk()
root.wm_title("Question and Answer")
root.resizable(0, 0)

app = Q_and_A(root)
root.mainloop()

実行するとresults_txtbx、スクロールバーに合わせてサイズが変更されます。を使用して元のサイズを維持する方法はありますgridか?

4

3 に答える 3

5

テキスト ウィジェットをスクロールバーのマスターとして使用したくない場合。他のウィジェットと同様に、スクロールバーをテキスト ウィジェットにパックまたはグリッド化すると、テキスト ウィジェットはスクロールバーに合わせて縮小または拡大します。それがあなたの問題の核心です。

代わりに、別のフレームを作成し (既に行っています)、そのフレームをテキスト ウィジェットとスクロールバーの両方の親として使用します。スクロールバーが内側にあるような外観が必要な場合は、テキスト ウィジェットの borderwidth を 0 に設定してから、含まれているフレームに小さな境界線を付けます。

使いやすさに関する最後のヒントとして、ウィンドウをサイズ変更不可にしないことをお勧めします。あなたのユーザーは、あなたよりもウィンドウのサイズをよく知っているでしょう。そのコントロールをユーザーから奪わないでください。

これが(大まかに)コードを実装する方法です:

  • グローバルなインポートは一般的に悪い考えなので、私はimport Tkinter as tkむしろ使用します。from Tkinter import *
  • ウィジェットとして扱うことができるようにQ_and_A、のサブクラスを作成します。tk.Frame
  • ウィンドウ全体をサイズ変更可能にします
  • ウィジェットの作成とウィジェットのレイアウトを分けて、すべてのレイアウト オプションを 1 か所にまとめます。これにより、IMO の作成と保守が容易になります。
  • 私の答えで述べたように、テキストとスクロールバーのウィジェットをフレーム内に配置します

最終結果は次のとおりです。

import Tkinter as tk

class Q_and_A(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master, borderwidth=1, relief="sunken")
        self.label = tk.Label(self)
        self.results_txtbx = tk.Text(self, width=20, height=4, wrap="none",
                                     borderwidth=0, highlightthickness=0)
        self.results_scrbr = tk.Scrollbar(self, orient="vertical", 
                                          command=self.results_txtbx.yview)
        self.results_txtbx.configure(yscrollcommand=self.results_scrbr.set)

        self.label.grid(row=1, columnspan=2)
        self.results_scrbr.grid(row=0, column=1, sticky="ns")
        self.results_txtbx.grid(row=0, column=0, sticky="nsew")
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)

root = tk.Tk()
root.wm_title("Question And Answer")

app = Q_and_A(root)
app.pack(side="top", fill="both", expand=True)
root.mainloop()
于 2013-05-29T10:50:33.330 に答える
1

ウィンドウのサイズを変更できないため、results_scrbr.grid(row = 3, column = 2)横に設定する必要はありません。padx を下げて、スクロールバーがテキストに近づくようにしました。results_txtbx.grid(row = 3,column = 1, padx = 4)sticky

また、results_txtbx を垂直方向にスクロール可能にするには、追加します。results_scrbr.config(command=results_txtbx.yview)

ここに作業コードがあります...

from Tkinter import *

class Q_and_A:

    def __init__(self, master):
        frame = Frame(master)

        Label(master).grid(row = 4)

        results_txtbx = Text(master)
        results_scrbr = Scrollbar(master)
        results_scrbr.grid(row = 3, column = 2)
        results_scrbr.config(command=results_txtbx.yview)


        results_txtbx.config(width = 20, height = 4,
                             wrap = NONE, yscrollcommand = results_scrbr.set)
        results_txtbx.grid(row = 3, column = 1, padx = 4)



root = Tk()
root.wm_title("Question and Answer")
root.resizable(0, 0)

app = Q_and_A(root)
root.mainloop()
于 2013-05-29T07:59:57.830 に答える