1

だから私はクラスで少しC++コンソールのことをすることができ(私が思うにそれほど派手なことは何もない)、Python(素晴らしい言語、心配のないC ++のようなもの)とTkinterから始めたばかりです。

問題は、GUIを備えたプログラムが一般的にどのように構成されているかについての手がかりが実際にはないということです。インターフェイスを内部の仕組みから分離する必要があることは知っていますが、それだけです。例として、ExcelテーブルをLaTeXテーブルに変換する小さなアプリに取り組んでいますが、これまでのところ、次のようになっています。

from Tkinter import *

class ExcelToLateX:
    def __init__(self,master):
        self.convert = Button(master,text="Convert",command=self.Conversion)
        self.convert.pack(side=BOTTOM,fill=X)
        self.input=Input(master,40)
        self.output=Output(master,40)
    def Conversion(self):
        self.output.Write(self.input.Read())


class Input:
    def __init__(self,master,x):
        self.u=Text(master,width=x)
        self.u.pack(side=LEFT)
        self.u.insert(1.0,"Paste Excel data here...")

    def Read(self):
        return self.u.get(1.0,END)


class Output:
    def __init__(self,master,x):
        self.v=Text(master,width=x)
        self.v.pack(side=RIGHT)
        self.v.insert(1.0,"LaTeX code")
    def Write (self,input):
        self.input=input
        if self.v.get(1.0,END)=="":
            self.v.insert(1.0,self.input)
        else:
            self.v.delete(1.0,END)
            self.v.insert(1.0,self.input)

#Test script
root=Tk()
Window=ExcelToLateX(root)
root.mainloop()

だから私はものを読み書きできる2つのテキストウィジェットと(今のところ)Excelテーブルを取りLaTeXコードを吐き出す空の変換クラスを持っています。これが進むべき道かどうかはわかりません(コメントやヒントをいただければ幸いです)。

つまり、2つの質問があります。

  • GUIを備えたプログラムがどのように構成されているかに関する情報を提供する広く認められている情報源はありますか?(PythonとTkinterが望ましいのは、それが私が正しく知っていることだからですが、もう少し一般的(言語間)かもしれませんが)

  • 私の現在のアプリケーションは構造に関しては良いですか?そうでない場合、経験則と私が改善できることは何ですか?

4

1 に答える 1

2

帽子にいくつかの短いコメントを入れます。私は Tkinter の経験がないので、私の知識は PyQt4 の経験から得ています。

現在、単一のウィジェットをメンバー属性にすることで、クラスの構成を使用しています。これは明らかに機能しますが、便利なパターンは、GUI ウィジェットをサブクラス化し、さらに子ウィジェットを追加してそのクラスにペアレント化することでレイアウトを構成することです。私が見つけたこのランダムな Tkinter チュートリアル リンクの例を参照してください: http://zetcode.com/tutorials/tkintertutorial/

class Example(Frame):
    def __init__(self, parent):
        super(Example, self).__init__(parent)
        ...

また、Python の一般的な規則と同様に、クラス名には大文字を使用し、クラス インスタンスのメソッドと変数にはキャメルケースまたは under_score を使用するようにしてください。あなたが持っているように、インスタンス(Window =)とメソッド(Write)に資本を使用しています

また、Tkinter ウィジェットをサブクラス化する予定がない場合は、少なくとも以下からサブクラス化して新しいスタイルのクラスを使用するようにしてobjectください: http://realmike.org/blog/2010/07/18/introduction-to-new -style-classes-in-python/

古典的な python イディオム内でイベント ループを実行するコードの最後の部分をネストすることもできます。

if __name__ == "__main__":
    root=Tk()
    window = ExcelToLateX(root)
    root.mainloop()

このモジュールを別のアプリケーションにライブラリとしてインポートする場合、アプリケーションがすぐに実行されるのを防ぎます。

于 2012-04-15T17:58:16.710 に答える