私は自分のバージョンのCrazy Eightsを作成しています。アプリの背後にあるすべてのロジックは問題ありませんが、私はキャンバスにカードを置くことに問題があります。実際には、自分のメインウィンドウ/キャンバス(800x800)に特定のサイズを設定すると、自分のアプリがうまく動作します。しかし、私は自分のアプリケーションが実行しているデバイスの画面サイズを取得し、メインウィンドウのサイズを変更したいと思っていました。水平方向と垂直方向に私のカードをTkinter - キャンバスで相対オフセットを使用して画像を整える
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))
すべてがこの時点までは結構ですが、その後、私は再びセンター(アライン)しようとしているいくつかのトラブルを持っている:私は、その次の行を追加することで実現しました。例:片手では、すべてのカードは絶対オフセット(x、700)を使用して配置されます。ここで、xは、カード間で距離を与えるために増加し、700は、y座標における位置である。しかし、絶対オフセットを使用するのは、ウィンドウサイズが固定されている場合のみです。したがって、私はrelyとrelx(配置ジオメトリ)のような相対オフセットを使いたいと思っていましたが、どうやってそれを行うのか分かりません。ここでは、何が起こったのか、私が望んでいるのかをあなたに知らせるためのイメージを掲載します。ここで
私のスクリプトされています。また、私は、クリックイベントの後に私のカード(揃える)再センターに関数を作成したい
import tkinter as tk
class start_gui(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self,parent, *args, **kwargs)
self.hand = dict()
# create canvas
self.w, self.h = parent.winfo_screenwidth(), parent.winfo_screenheight()
self.canvas = tk.Canvas(parent, width=self.w, height=self.h, background="red")
self.x = 280
self.playerHand = self.gethand()
# display for south
for Card in playerHand:
self.hand[(self.canvas.create_image(self.x, 700, image=self.getImage(Card[0], Card[1]), tags='p1'))] = [
Card[0], Card[1], sel.x, 700]
self.x += 20
# print(str(Card.suit))
def gethand(self):
# here goes some script to get player card hand
# return a list of lists
def getImage(self, num, suit):
# return image item
if __name__ == "__main__":
root = tk.Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))
start_gui(root)
root.mainloop()
上記の画像から、1つの正方形をクリックすると、選択した四角はキャンバスの中央に配置され、他のカードはカード間の初期スペースを維持しながら水平に整列します。もう一度クリックすると、前のイベントが行われます。
誰かがこれを手伝ってくれますか?前もって感謝します。