5

私は、構成ウィンドウである UI クラスの関数に取り組んでいます。プログラムのロゴが表示され、下部に更新テキストが表示され、読み込まれているものなどが表示されます。これは私がこれまでに持っているものです:

    self.window = "config"
    self.windowWidth = 340
    self.windowHeight = 270
    infoText = "Configuring Kh..."
    self.root = tk.Tk()
    self.root.geometry("%dx%d+400+400" % (self.windowWidth, self.windowHeight))
    self.root.title("Kh Control v1.1 starting...")
    logo = tk.PhotoImage(file="KhLogo.gif")
    mainPanel = tk.Canvas(self.root, width=self.windowWidth, height=self.windowHeight)
    mainPanel.image = logo
    mainPanel.pack()
    mainPanel.create_image(0, 0, image=logo, anchor="nw")
    mainPanel.create_text(0,200, text=infoText, anchor="nw", fill="yellow")
    return

infoText のテキストを水平方向に中央揃えし、垂直方向に約 200px 下にオフセットしたいと思います。垂直方向のオフセットは正常に機能しますが、テキストを水平方向に中央揃えにする方法がわかりません。

古いもの ((width / 2) - (str length / 2)) を試すことから始めましたが、各文字が 1px ではないことに気付きました。また、anchor = "center" は、画面の左側からテキストの半分しか配置していないようです。

私はPythonに非常に慣れていないので(ほんの数日しか経っていません)、明らかな何かが欠けている場合は、それが理由です。

編集: 明らかでない場合、このテキストは変更されるため、オフセットについて絶対的な決定を下すことはできません。テキストで変更する必要があります

4

3 に答える 3

10

キャンバス参照を探し回った後、私はそれを理解しました。

項目が占める領域の (x1, y1, x2, y2) を含むタプルを返す bbox と呼ばれるキャンバスのメソッドがあります。私はそれらの座標を取得し、px の長さを見つける関数を作成し、それを 2 で割り、ウィンドウの幅から引きました。次に、canvas.move を使用して、関数が返した数値を使用して x オフセットを変更しました。

    def findXCenter(self, canvas, item):
      coords = canvas.bbox(item)
      xOffset = (self.windowWidth / 2) - ((coords[2] - coords[0]) / 2)
      return xOffset

主な部分は次のとおりです。

    textID = mainPanel.create_text(0,0, text=infoText, anchor="nw", fill="yellow")
    xOffset = self.findXCenter(mainPanel, textID)
    mainPanel.move(textID, xOffset, 0)

この答えを探す私の時間は、後で誰かを助けることを願っています.

于 2015-02-27T04:04:32.623 に答える
2

justifyパラメータを使用してみましたか?多くの場合center、テキスト以外のオブジェクトで使用されます。

https://stackoverflow.com/a/15016161/3900967で洞察が得られる場合があります。

于 2015-02-26T22:52:20.933 に答える
0

.create_text() メソッドの最初の部分を使用して、テキストの位置を設定できます。http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/create_text.htmlを参照してください。

この位置をウィンドウの水平方向の中心にするには、x 座標として self.windowWidth / 2 を使用します

デフォルトでは、テキストは指定された位置を中心に固定されます。(.create_text はデフォルトで anchor="CENTER" になります)

また、anchor="nw" を削除すると、テキストが指定された位置の右下に表示されるようになります。

そのため、更新されたコードはそうあるべきです。

self.window = "config"
self.windowWidth = 340
self.windowHeight = 270
infoText = "Configuring Kh..."
self.root = tk.Tk()
self.root.geometry("%dx%d+400+400" % (self.windowWidth, self.windowHeight))
self.root.title("Kh Control v1.1 starting...")
logo = tk.PhotoImage(file="KhLogo.gif")
mainPanel = tk.Canvas(self.root, width=self.windowWidth, height=self.windowHeight)
mainPanel.image = logo
mainPanel.pack()
mainPanel.create_image(0, 0, image=logo, anchor="nw")
mainPanel.create_text(self.windowWidth/2,200, text=infoText, fill="yellow")
return
于 2015-10-18T03:33:42.597 に答える