为了账号安全,请及时绑定邮箱和手机立即绑定

使用 rowspan 在 tkinter 中画布未正确排列

使用 rowspan 在 tkinter 中画布未正确排列

人到中年有点甜 2023-05-09 10:59:22
我在 python 中有一些代码,主要使用库 tkinter 进行 Hangman 游戏:from tkinter import *from PIL import ImageTk, Imageimport timepause=500class Graphics(Canvas):    pics = {        '1':'backgrounds/step1.png',        '2':'backgrounds/step2.png',        '3':'backgrounds/step3.png',        '4':'backgrounds/step4.png',        '5':'backgrounds/step5.png',        '6''backgrounds/step6.png',        '7':'backgrounds/step7.png',        '8':'backgrounds/step8.png',        '9':'backgrounds/step9.png',        '10':'backgrounds/step10.png',        '11':'backgrounds/step11.png',        '12':'backgrounds/step12.png'    }    def __init__(self, master):        self.width=500        self.height=550        Canvas.__init__(self, master, bg='saddle brown', width=self.width, height=self.height, highlightthickness=0)        # self.step = '1'        # self.createImage(self.step)    def createImage(self,picName,size=()):        if size==():            size=(self.width,self.height)        filename = self.pics[picName]        self.im = Image.open(filename)        self.resizePic(size)        self.img=ImageTk.PhotoImage(self.im)        self.pic = self.create_image(self.width/2,self.height/2,anchor=CENTER,\                                     image=self.img)    def resizePic(self,size):        self.im = self.im.resize(size,Image.ANTIALIAS)    def nextStep(self):        if self.step=='6':            self.after(pause, self.master.welcome)            return        self.step = str(int(self.step)+1)        self.delete(self.pic)        self.createImage(self.step)        self.after(pause, self.nextStep)就我的问题而言,不需要图片。无论如何,我希望在停顿 1/2 秒后出现“欢迎”“到”“刽子手”这些词。时机和一切都是正确的。然而,不是三个画布正确地排列在“棕色矩形”旁边,而是其中一个奇怪地居中在它的右边,另外两个在它下面。为什么会这样?
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

这是因为您忘记分配masterCanvas.__init__(...)内部TEXT.__init__()函数。

更改如下:

class TEXT(Canvas): 
   def __init__(self, master, width, height, text):
        Canvas.__init__(self, bg='black',width=width,height=height,highlightthickness=0)

到:

class TEXT(Canvas): 
   def __init__(self, master, width, height, text):
        Canvas.__init__(self, master, bg='black',width=width,height=height,highlightthickness=0)



查看完整回答
反对 回复 2023-05-09
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

你必须告诉你的框架它将有多少行。


改变:


class Hangman(Frame):


    def __init__(self, master):


        Frame.__init__(self, master)

        self.grid()

到:


class Hangman(Frame):


    def __init__(self, master):


        Frame.__init__(self, master)

        self.grid(rowspan=10)

原因是网格忽略了空行和空列。



查看完整回答
反对 回复 2023-05-09
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信