0

ちなみに私はPython3.1を使用しています。

Tkinter(ラベル、テキスト入力フィールド、最初の行のボタン、右側と下部にスクロールバーが付いた編集可能なテキスト領域)を2番目の行に使用して簡単なGUIを構築しようとしています。レイアウトの修正を手伝ってください。私が以下に持っているものは完全には機能しません。グリッドを使用する必要がある場合は、使用します。コードを非常にシンプルに保ちたいと思っています。Pythonを同僚の何人かに「売り」たいと思っています。だから、ややまともなルックアンドフィールを手に入れたいです。気にしない場合は、より良いパディングを提案してください。また、変数名などがおかしいと思われる場合は、メモしてください。

同時に、これは私があまり時間をかけなかった使い捨てのスクリプトであると偽りたいと思います。私はあなたの助けを求めているので、そうではありませんが、彼らは知る必要はありません;)。ですから、素敵な境界線などを作成するための派手なコードを導入したくはありません。視覚的に魅力的で、クリーンでシンプルなものが欲しいだけです。そうしないと、私のプレゼンテーションはその目標を達成できません。

ありがとう、私のコードは以下の通りです:

class App:
    def __init__(self, parent):
        frame = Frame(parent)
        self.__setup_gui(frame) # Call Helper
        frame.pack(padx=15, pady=15)
        parent.title('To be changed')

    def __setup_gui(self, frame):

        # First Row
        self.cs_label = Label(frame, text='Change Set: ')
        self.cs_label.pack(side=LEFT, padx=10, pady=10)

        self.cs_val = Entry(frame, width=10)
        self.cs_val.pack(side=LEFT, padx=10, pady=10)

        self.get_button = Button(frame, text='Get', command=self.get_content)
        self.get_button.pack(side=LEFT, padx=10, pady=10)

        # Text area and scrollbar
        self.text_area = Text(frame, height=10, width=50, background='white')
        # Put a scroll bar in the frame
        scroll = Scrollbar(frame)
        self.text_area.configure(yscrollcommand=scroll.set)
        self.text_area.pack(side=TOP)
        scroll.pack(side=RIGHT,fill=Y)

        self.clipboard_var = IntVar()
        self.notepad_var = IntVar()

    def get_content(self):
        print(self.clipboard_var.get())
        print(self.notepad_var.get())

###################################################################################################

if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()
4

1 に答える 1

2

間違いなくグリッド マネージャーが必要です。Pack は、垂直または水平のスタックアップに対してのみ機能します。複数のフレームを使用して回避することもできますが、グリッドで開始するだけで GUI を拡張する方が簡単だと思います。

これが、あなたが言ったこととコードに基づいて、私が本当に素早く作り上げたものです。パディングを減らし/削除しました-私には巨大に見えました-パディングをより簡単に機能させるために、サブフレームに2つのスクロールバーを設定しました。水平スクロールバーを便利にするには、テキスト領域に wrap=NONE が必要であることに注意してください。それ以外の場合は、tkinter.scrolledtext の簡単な「ScrolledText」ウィジェットを使用して、水平スクロール バーをスキップすることもできます。

上部のボタンを表示する最小サイズで、サイズ変更を可能にするために少しフレームを変更しました - minsize と row/columnconfigure の使用を参照してください。

ところで、あなたの変数はどこからも引き出されていないようです - それは意図的なものですか?

from tkinter import *

class App:
    def __init__(self, parent):
        self.__setup_gui(parent) # Call Helper
        parent.title('To be changed')

    def __setup_gui(self, parent):

        # First Row
        self.rowframe = Frame(parent)
        self.rowframe.grid()
        self.cs_label = Label(self.rowframe, text='Change Set: ')
        self.cs_label.grid(row=0, column=0, padx=2, pady=2)

        self.cs_val = Entry(self.rowframe, width=10)
        self.cs_val.grid(row=0, column=1, padx=2, pady=2)

        self.get_button = Button(self.rowframe, text='Get', command=self.get_content)
        self.get_button.grid(row=0, column=2, padx=2, pady=2)
        parent.update_idletasks()
        parent.minsize(width=self.rowframe.winfo_width(), height=self.rowframe.winfo_height())

        # Text area and scrollbars
        self.textframe = Frame(parent)
        self.textframe.grid(row=1, columnspan=2, padx=2, pady=2, sticky=N+S+E+W)

        self.hscroll = Scrollbar(self.textframe, orient=HORIZONTAL)
        self.vscroll = Scrollbar(self.textframe)
        self.text_area = Text(self.textframe, height=10, width=50, wrap=NONE, background='white', yscrollcommand=self.vscroll.set, xscrollcommand=self.hscroll.set)
        self.text_area.grid(row=0, column=0, sticky=N+S+E+W)
        self.hscroll.config(command=self.text_area.xview)
        self.hscroll.grid(row=1, column=0, sticky=E+W)
        self.vscroll.config(command=self.text_area.yview)
        self.vscroll.grid(row=0, column=1, sticky=N+S)

        # Row 0 defaults to 0
        parent.rowconfigure(1, weight=1)
        parent.columnconfigure(1, weight=1)

        # Textarea setup
        self.textframe.rowconfigure(0, weight=1)
        self.textframe.columnconfigure(0, weight=1)


        self.clipboard_var = IntVar()
        self.notepad_var = IntVar()

    def get_content(self):
        print(self.clipboard_var.get())
        print(self.notepad_var.get())

###################################################################################################

if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()

とはいえ、PyGTK、PyQt、または wxPython を使用すると、より視覚的な魅力が得られる可能性がありますが、tkinter が「標準」になることは優れた機能です。

于 2010-02-12T17:14:00.580 に答える