Python Forum
[Tkinter] How do I stop window changing size?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] How do I stop window changing size?
#1
Hi People,

I'm having trouble preventing the labels from changing their widths, and thus increasing and decreasing the Tkinter window Wall . Any ideas Huh ?

I have created a Tkinter window that displays information on my "Power Bar". I want the information to stay in a pretty static format. I thought I could just set a width property on the grid, but I can't see where to specify that Think .

import tkinter as tk
import pygame

pygame.init()

pwbr_power = 0
pwbr_duration = 0
pwbr_scrn_refresh = 0
pwbr_elps_time = 0
pwbr_ttl_sec = 0

pwbr_fcharged = False
pwbr_overload = False   # Reactor overload status.
pwbr_status = None

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()
        self.createwidgets()
    # __init__() ---------------------------------------------------------------


    def _cmd_quit(self):
        """
        Terminates the Tkwindow.
        """
        
        global quit_loop
        
        self.master.destroy()
        quit_loop = True
    # _cmd_quit() --------------------------------------------------------------

    
    def createwidgets(self):
        """
        Creates the numerous widgets that make up the form.
        """
        
        global pwbr_power, pwbr_duration, pwbr_scrn_refresh, pwbr_elps_time
        global pwbr_ttl_sec

        global pwbr_fcharged, pwbr_overload, pwbr_status

        pwbr_power += 1
        pwbr_duration += 0.15
        pwbr_elps_time += pwbr_duration
        pwbr_scrn_refresh = 0.333
        pwbr_ttl_sec += pwbr_elps_time

        pwbr_fcharged = False
        pwbr_overload = False   # Reactor overload status.
        pwbr_status = "Normal"

        if pwbr_elps_time > pwbr_scrn_refresh:
            pwbr_elps_time = 0
            pwbr_duration = 0

        caption_pwr = "Power: " + str(pwbr_power)
        caption_dur = "Duration: " + str(pwbr_duration)
        caption_rfrsh =  "Screen Refresh: " + str(pwbr_scrn_refresh)
        caption_etime = "Elapsed time: " + str(pwbr_elps_time)
        caption_ttl = "Total sec's: " + str(pwbr_ttl_sec)

        caption_fcharged = "Fully charged: " + str(pwbr_fcharged)
        caption_overload = "Reactor overloading: " + str(pwbr_overload)
        caption_status = "Power bar status: " + str(pwbr_status)

        caption_hint1 = "Press [Spacebar] to simulate firing phaser cannons."
        caption_hint2 = "Press [r] to initiate a reactor overload."
        caption_hint3 = "Press [Esc] to quit"
        
        self.lblpower = tk.Label(self, text=caption_pwr, fg="black")
        self.lblduration = tk.Label(self, text=caption_dur, fg="black")
        self.lblrefreshrate = tk.Label(self, text=caption_rfrsh, fg="black")
        self.lbletime = tk.Label(self, text=caption_etime, fg="black")
        self.lbltotalsec = tk.Label(self, text=caption_ttl, fg="black")

        self.lblfcharged = tk.Label(self, text=caption_fcharged, fg="black")
        self.lbloverload = tk.Label(self, text=caption_overload, fg="black")
        self.lblstatus = tk.Label(self, text=caption_status, fg="black")

        self.lblhint1 = tk.Label(self, text=caption_hint1, fg="black")
        self.lblhint2 = tk.Label(self, text=caption_hint2, fg="black")
        self.lblhint3 = tk.Label(self, text=caption_hint3, fg="black")
        
        self.quitButton = tk.Button(self, text='Quit', command=self._cmd_quit)
        
        self.lblpower.grid(row=0, column=0)
        self.lblduration.grid(row=1, column=0)
        self.lblrefreshrate.grid(row=2, column=0)
        self.lbletime.grid(row=3, column=0)
        self.lbltotalsec.grid(row=4, column=0)

        self.lblfcharged.grid(row=0, column=3)
        self.lbloverload.grid(row=1, column=3)
        self.lblstatus.grid(row=2, column=3)

        self.lblhint1.grid(row=5, column=2)
        self.lblhint2.grid(row=6, column=2)
        self.lblhint3.grid(row=7, column=2)

        self.quitButton.grid(row=6, column=3)
        
        self.update()
        
        self.after(1000, self.update_info)
    # createwidgets() ----------------------------------------------------------
    

    def update_info(self):
        """
        Updates the status information in the tkinter window.
        """
        
        global pwbr_power, pwbr_duration, pwbr_scrn_refresh, pwbr_elps_time
        global pwbr_ttl_sec
        
        pwbr_power += 1
        pwbr_duration += 0.15
        pwbr_elps_time += pwbr_duration
        pwbr_scrn_refresh = 0.333
        pwbr_ttl_sec += pwbr_elps_time

        if pwbr_elps_time > pwbr_scrn_refresh:
            pwbr_elps_time = 0
            pwbr_duration = 0

        caption_pwr = "Power: " + str(pwbr_power)
        caption_dur = "Duration: " + str(pwbr_duration)
        caption_rfrsh =  "Screen Refresh: " + str(pwbr_scrn_refresh)
        caption_etime = "Elapsed time: " + str(pwbr_elps_time)
        caption_ttl = "Total sec's: " + str(pwbr_ttl_sec)

        self.lblpower.config(text=caption_pwr)
        self.lblduration["text"] = caption_dur
        self.lblrefreshrate.config(text=caption_rfrsh)
        self.lbletime.config(text=caption_etime)
        self.lbltotalsec.config(text=caption_ttl)

        self.after(1000, self.update_info)
    # update_info() ----------------------------------------------------------
# Application() ----------------------------------------------------------------


pygame.display.set_mode((640, 480))

app = Application()
app.master.title("Power Bar")
#app.mainloop()




quit_loop = False
while quit_loop is not True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # If user clicked close
            quit_loop = True  # Flag that we are done so we exit this loop
        elif event.type == pygame.MOUSEBUTTONUP:
            pass
        elif event.type == pygame.constants.KEYDOWN:
            if event.key == pygame.constants.K_ESCAPE:
                quit_loop = True
                break
            elif event.key == pygame.constants.K_LEFT:
                kbd["left"] = True
            elif event.key == pygame.constants.K_RIGHT:
                kbd["right"] = True
            elif event.key == pygame.constants.K_UP:
                kbd["up"] = True
            elif event.key == pygame.constants.K_DOWN:
                kbd["down"] = True
            elif event.key == pygame.constants.K_SPACE:  # Fire.
                kbd["fire"] = True
            elif event.key == pygame.constants.K_LCTRL:  # Thrust.
                kbd["thrust"] = True
            elif event.key == pygame.constants.K_r:
                kbd["overload"] = True
        elif event.type == pygame.constants.KEYUP:
            if event.key == pygame.constants.K_LEFT:
                kbd["left"] = False
            elif event.key == pygame.constants.K_RIGHT:
                kbd["right"] = False
            elif event.key == pygame.constants.K_UP:
                kbd["up"] = False
            elif event.key == pygame.constants.K_DOWN:
                kbd["down"] = False
            elif event.key == pygame.constants.K_SPACE:  # Fire.
                kbd["fire"] = False
            elif event.key == pygame.constants.K_LCTRL:  # Thrust.
                kbd["thrust"] = False
            elif event.key == pygame.constants.K_r:
                kbd["overload"] = False
            # end if
        # end if
    # end for loop

    # { Paint some graphics on the screen.
    #   ...
    # }.
    pygame.display.flip()
    app.master.update()
# end while loop
Reply
#2
My bad Doh . It does have a width property. Would delete post but can't find the option to Angel .

The link below is a pretty good source of information on the different widgets and the attributes. Its presented well with a description for every option (attribute/Property?).
Detailed listing and description of TTK widgets
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Interaction between Matplotlib window, Python prompt and TKinter window NorbertMoussy 3 501 Mar-17-2024, 09:37 AM
Last Post: deanhystad
  [Tkinter] Trying to change font size w/o changing button size python63 3 9,853 Aug-05-2020, 01:04 AM
Last Post: Larz60+
  tkinter window and turtle window error 1885 3 6,721 Nov-02-2019, 12:18 PM
Last Post: 1885
  Stop Watch star/stop problem macellan85 1 2,566 Jun-12-2019, 06:04 PM
Last Post: woooee
  How to stop a tkinter function, without closing the window? keakins 5 13,064 Jun-29-2017, 11:53 AM
Last Post: keakins
  update a variable in parent window after closing its toplevel window gray 5 9,084 Mar-20-2017, 10:35 PM
Last Post: Larz60+
  PyGtk3 why is Locale Folder Size Half of Module Size ? harun2525 1 3,620 Mar-09-2017, 03:46 AM
Last Post: Analyser

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020