我正在創建我自己的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座標中的位置。但是,使用絕對偏移僅在窗口大小固定時才起作用。因此,我想使用像rel和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()
另外,我想創建一個函數click事件後重新中心(調整)我的卡。我張貼另一張圖片給你一個想法。
從上圖中,如果我們點擊一個正方形。選定的方塊將放置在畫布中間,其他卡將水平對齊,以保持卡片之間的初始空間。如果我們再次點擊鼠標,上一個事件將會發生,依此類推。
有人可以幫助我嗎?先謝謝你。