【发布时间】:2017-12-20 21:19:34
【问题描述】:
帮助!我正在使用 python 3.5.2 并且函数 self.new_game 不起作用。它应该将文本放在画布上,但它什么也没做! shell中也没有出现错误。
from tkinter import *
import time
import os
WIDTH = 1920
HEIGHT = 1080
root = Tk()
root.state('zoomed')
planet_selected = 0
planet_name = "nothing"
planet_temp = -270
planet_size = 0.0
planet_life = 0.0
class Space(Frame):
def __init__(self):
Frame.__init__(self)
frame1 = Frame(self)
self.canvas = Canvas(frame1, width = WIDTH, height = HEIGHT, bg ="white")
self.canvas.focus_set()
self.canvas.create_text(1920,1000,text='Planetary Creator',font=('Arial',15))
self.master.title("Planetary Creator Alpha 0.1")
frame = Frame(root, bg='grey', width=1920, height=40)
frame.pack(fill='x')
button1 = Button(frame, text='New Game',command=lambda : self.new_game())
button1.pack(side='left', padx=10)
button2 = Button(frame, text='Quit Game',command=lambda : os._exit(0))
button2.pack(side='left')
#this function below does not work!!!
def new_game(self):
self.canvas.delete(ALL)
size = self.canvas.create_text(960,540,text=str(planet_size) + "moon",font=("Arial",10))
life = self.canvas.create_text(960,520,text="✣" + str(planet_life) + "%",font=("Arial",10))
temp = self.canvas.create_text(960,500,text=str(planet_temp) + "°C",font=("Arial",10))
name = self.canvas.create_text(960,480,text=planet_name,font=("Arial",15))
Space().mainloop()
【问题讨论】:
-
您没有布局多个小部件。您需要将
self.pack()、self.canvas.pack()和frame1.pack()添加到您的__init__方法中。 -
self.pack() 应该放在哪里
-
所有这些都进入
Space.__init__。 -
执行 self.pack() 会使我的面板和按钮消失
-
我通常想从父级调用那些布局管理器,但不确定它是否是正确的方法。
标签: python python-3.x canvas tkinter