我正在创建我自己的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事件后重新中心(调整)我的卡。我张贴另一张图片给你一个想法。
从上图中,如果我们点击一个正方形。选定的方块将放置在画布中间,其他卡将水平对齐,以保持卡片之间的初始空间。如果我们再次点击鼠标,上一个事件将会发生,依此类推。
有人可以帮助我吗?先谢谢你。