簡體   English   中英

Tkinter Label 在使用 pyinstaller 創建可執行文件后不適合 window

[英]Tkinter Label Won't fit in the window after creating an executable with pyinstaller

我用 pyinstaller 做了一個應用程序,但在一些將使用它的機器上,從 window 中剪下一些標簽,另外還有兩個文本框,見圖 我該如何解決這個問題? 在我的機器上它適合,在另一個不適合。 我認為問題出在 place() 方法上,但我不知道為什么它在計算機中有效而在另一台計算機中無效。

在此處輸入圖像描述

import tkinter as tk
from tkinter import ttk
import tkinter.font as font
import tkinter.messagebox

class Application(ttk.Frame):   
    def __init__(self, main_window):
        super().__init__(main_window)
        self.place(relwidth=1, relheight=1)
        ttk.Style(main_window)
        font.nametofont("TkTextFont").configure(size=12)
        font.nametofont("TkDefaultFont").configure(size=12)
        #Cabecalho
        ttk.Label(self, text="Requisições", font='arial 18 bold').place(x=150, y=5)
        ttk.Label(self, text="Desligamento", font='arial  18 bold').place(x=142, y=35)
        #Informações usúario
        ttk.Label(self, text="Usuário", font='arial  16 bold').place(x=10, y=100)
        ttk.Label(self, text="Email:", font='arial  14').place(x=10, y=128)
        ttk.Entry(self, width=20).place(x=85, y=128)
        ttk.Label(self, text="Senha:", font='arial  14').place(x=10, y=158)
        ttk.Entry(self,  show="•").place(x=85, y=158)
        #Lote
        ttk.Label(self, text="Lote", font='arial 16 bold').place(x=10, y=190)
        ttk.Label(self, text="Início:", font='arial  14').place(x=10, y=220)
        ttk.Entry(self, width=10).place(x=85, y=220)
        ttk.Label(self, text="Final:", font='arial  14').place(x=10, y=248)
        ttk.Entry(self, width=10).place(x=85, y=250)
        ttk.Label(self,text="dd/mm/aaaa",foreground='red',font='arial 10 italic').place(x=93, y=280)
        ttk.Button(self,text= 'Download').place(x=210, y=215)
        ttk.Button(self,text= 'Planilha').place(x=210, y=247)
        #Informações
        ttk.Label(self, text="Informações",font='arial 16 bold').place(x=10, y=310)
        ttk.Button(self, text="Anexado").place(x=160, y=305)
        ttk.Button(self, text="Pendente").place(x=280, y=305)
        #Montagem listbox
        frame = tk.Frame(main_window)
        frame.pack()
        frame.place(x=10,y=340)
        self.listbox = tk.Listbox(frame,width=45, height=8, selectbackground='#808080', selectmode= 'extended')
        self.listbox.pack(side="left", fill="y")
        self.scrollbar = ttk.Scrollbar(frame, orient="vertical")
        self.scrollbar.config(command=self.listbox.yview)
        self.scrollbar.pack(side="right", fill="y")
        self.listbox.config(yscrollcommand=self.scrollbar.set)
        ttk.Button(self, text="Exibir").place(x=10, y=525)
        ttk.Button(self, text="Aprovada").place(x=160, y=525)
        ttk.Button(self, text="E mail Ponto").place(x=310, y=525)
        ttk.Button(self, text="E mail Pendente", ).place(x=10, y=560)
        # Informações da carta a ser exibida
        ttk.Label(self,text="Requisição:"      , font='arial 14 bold').place(x=450 , y=10)       
        ttk.Label(self,text="Nome:"            , font='arial 14 bold').place(x=450 , y=40)             
        ttk.Label(self,text="Aviso Prévio:"    , font='arial 14 bold').place(x=1000, y=40)        
        ttk.Label(self,text="Motivo:"          , font='arial 14 bold').place(x=650 , y=10)           
        ttk.Label(self,text="Comunicação:"     , font='arial 14 bold').place(x=1010, y=10)     
        ttk.Label(self,text="Desligamento:"    , font='arial 14 bold').place(x=1300, y=10)    
        ttk.Label(self,text="Matrícula:"       , font='arial 14 bold').place(x=1310, y=40)       
        ttk.Label(self,text="Salário:"         , font='arial 14 bold').place(x=450 , y=70)          
        ttk.Label(self,text="Admissão:"        , font='arial 14 bold').place(x=650 , y=70)         
        ttk.Label(self,text="Atualização:"     , font='arial 14 bold').place(x=910, y=70)
        ttk.Label(self,text="Cargo:"           , font='arial 14 bold').place(x=1160, y=70)
        #Montagem Janela Observação
        ttk.Label(self,text="Observações", font='arial 14 bold').place(x=1210, y=100)
        self.obs = tk.Text(self,height=10, width=42, fg="black", bg="white", font=("arial ", 12))
        self.obs.place(x=1210, y=130)
        #Montagem caixa de texto
        ttk.Label(self, text="Carta Inconsistente", font='arial  14 bold').place(x=10, y=600)
        self.texto = tk.Text(self, height=9, width=45, fg="#0911D0", bg="white", font=("arial ", 12), cursor="pencil")
        self.texto.place(x=10, y=630)
        # Botão Enviar email para carta náo ok
        ttk.Button(self, text="Enviar E mail").place(x=10, y=800)
        # Botão Sair
       ttk.Button(self, text="Sair", command=self.quit).place(x=310, y=800)
def main():
    main_window = tk.Tk()
    main_window.title("Desligamentos")
    main_window.state("zoomed")
    app = Application(main_window)
    app.mainloop()  
if __name__=="__main__":
        main()

您可以考慮這樣的事情,固定 GUI 大小top.resizable(0, 0) ,並使用relxrelheight rely relwidthplace() ,這些值是相對於父小部件的,所以如果你有嵌套小部件 ( ie a text box inside a label frame, then values for the label frame are relative to the top window and for the text box relative to the label frame).

try:
    from tkinter import *
except ImportError:
    from Tkinter import *

try:
    import tkinter.ttk as ttk
    py3 = 1
except ImportError:
    import ttk
    py3 = 0

def create_window():
    global root, top
    root = Tk()            # creating a tkinter window, Tk is a class
    top = MainFrame(root)  # building the gui, so it's like MainFrame is inheriting the Tk class
    root.mainloop()        # infinite main loop

class MainFrame:
    def __init__(self, top=None):
        self.style = ttk.Style()
        if sys.platform == "win32":
            self.style.theme_use('winnative')

        top.geometry("802x557+250+104")
        top.minsize(120, 1)
        top.maxsize(2970, 881)
        top.resizable(0, 0)      # fixing the GUI size

        self.Labelframe = LabelFrame(top)
        self.Labelframe.place(relx=0.4, rely=0.4, relheight=0.279, relwidth=0.264)
        self.Labelframe.configure(text='''Test label''', background="#d9d9d9")


if __name__ == '__main__':
    create_window()

只是一個建議,向.place()添加一個名為anchor的新參數。 Anchor 確定小部件的哪個部分到達指定的坐標。 例如,如果anchor = "center" ,relx 和rely 指定的坐標相對為0.5 和0.5,那么widget 的中間將go 為0.5、0.5。

有時錨是 nw 或左上角,有時小部件會移到屏幕的一側。

所以,把你的anchor設置為“中心”,然后告訴我會發生什么。

希望這會有所幫助!

編輯:

這將是您的代碼:

import tkinter as tk
from tkinter import ttk
import tkinter.font as font
import tkinter.messagebox

class Application(ttk.Frame):   
    def __init__(self, main_window):
        super().__init__(main_window)
        self.place(relwidth=1, relheight=1, anchor = "center")
        ttk.Style(main_window)
        font.nametofont("TkTextFont").configure(size=12)
        font.nametofont("TkDefaultFont").configure(size=12)
        #Cabecalho
        ttk.Label(self, text="Requisições", font='arial 18 bold').place(x=150, y=5, anchor = "center")
        ttk.Label(self, text="Desligamento", font='arial  18 bold').place(x=142, y=35, anchor = "center")
        #Informações usúario
        ttk.Label(self, text="Usuário", font='arial  16 bold').place(x=10, y=100, anchor = "center")
        ttk.Label(self, text="Email:", font='arial  14').place(x=10, y=128)
        ttk.Entry(self, width=20).place(x=85, y=128, anchor = "center")
        ttk.Label(self, text="Senha:", font='arial  14').place(x=10, y=158, anchor = "center")
        ttk.Entry(self,  show="•").place(x=85, y=158, anchor = "center")
        #Lote
        ttk.Label(self, text="Lote", font='arial 16 bold').place(x=10, y=190, anchor = "center")
        ttk.Label(self, text="Início:", font='arial  14').place(x=10, y=22, anchor = "center")
        ttk.Entry(self, width=10).place(x=85, y=220, anchor = "center")
        ttk.Label(self, text="Final:", font='arial  14').place(x=10, y=248, anchor = "center")
        ttk.Entry(self, width=10).place(x=85, y=250, anchor = "center")
        ttk.Label(self,text="dd/mm/aaaa",foreground='red',font='arial 10 italic').place(x=93, y=280, anchor = "center")
        ttk.Button(self,text= 'Download').place(x=210, y=215, anchor = "center")
        ttk.Button(self,text= 'Planilha').place(x=210, y=247, anchor = "center")
        #Informações
        ttk.Label(self, text="Informações",font='arial 16 bold').place(x=10, y=310, anchor = "center")
        ttk.Button(self, text="Anexado").place(x=160, y=305, anchor = "center")
        ttk.Button(self, text="Pendente").place(x=280, y=305, anchor = "center")
        #Montagem listbox
        frame = tk.Frame(main_window)
        frame.pack()
        frame.place(x=10,y=340, anchor = "center")
        self.listbox = tk.Listbox(frame,width=45, height=8, selectbackground='#808080', selectmode= 'extended')
        self.listbox.pack(side="left", fill="y")
        self.scrollbar = ttk.Scrollbar(frame, orient="vertical")
        self.scrollbar.config(command=self.listbox.yview)
        self.scrollbar.pack(side="right", fill="y")
        self.listbox.config(yscrollcommand=self.scrollbar.set)
        ttk.Button(self, text="Exibir").place(x=10, y=525, anchor = "center")
        ttk.Button(self, text="Aprovada").place(x=160, y=525, anchor = "center")
        ttk.Button(self, text="E mail Ponto").place(x=310, y=525, anchor = "center")
        ttk.Button(self, text="E mail Pendente", ).place(x=10, y=560, anchor = "center")
        # Informações da carta a ser exibida
        ttk.Label(self,text="Requisição:"      , font='arial 14 bold').place(x=450 , y=10, anchor = "center")       
        ttk.Label(self,text="Nome:"            , font='arial 14 bold').place(x=450 , y=40, anchor = "center")             
        ttk.Label(self,text="Aviso Prévio:"    , font='arial 14 bold').place(x=1000, y=40, anchor = "center")        
        ttk.Label(self,text="Motivo:"          , font='arial 14 bold').place(x=650 , y=10, anchor = "center")           
        ttk.Label(self,text="Comunicação:"     , font='arial 14 bold').place(x=1010, y=10, anchor = "center")     
        ttk.Label(self,text="Desligamento:"    , font='arial 14 bold').place(x=1300, y=10, anchor = "center")    
        ttk.Label(self,text="Matrícula:"       , font='arial 14 bold').place(x=1310, y=40, anchor = "center")       
        ttk.Label(self,text="Salário:"         , font='arial 14 bold').place(x=450 , y=70, anchor = "center")          
        ttk.Label(self,text="Admissão:"        , font='arial 14 bold').place(x=650 , y=70, anchor = "center")         
        ttk.Label(self,text="Atualização:"     , font='arial 14 bold').place(x=910, y=70, anchor = "center")
        ttk.Label(self,text="Cargo:"           , font='arial 14 bold').place(x=1160, y=70, anchor = "center")
        #Montagem Janela Observação
        ttk.Label(self,text="Observações", font='arial 14 bold').place(x=1210, y=100, anchor = "center")
        self.obs = tk.Text(self,height=10, width=42, fg="black", bg="white", font=("arial ", 12))
        self.obs.place(x=1210, y=130, anchor = "center")
        #Montagem caixa de texto
        ttk.Label(self, text="Carta Inconsistente", font='arial  14 bold').place(x=10, y=600, anchor = "center")
        self.texto = tk.Text(self, height=9, width=45, fg="#0911D0", bg="white", font=("arial ", 12), cursor="pencil")
        self.texto.place(x=10, y=630, anchor = "center")
        # Botão Enviar email para carta náo ok
        ttk.Button(self, text="Enviar E mail").place(x=10, y=800, anchor = "center")
        # Botão Sair
        ttk.Button(self, text="Sair", command=self.quit).place(x=310, y=800, anchor = "center")
def main():
    main_window = tk.Tk()
    main_window.title("Desligamentos")

    app = Application(main_window)
    app.mainloop()  
if __name__=="__main__":
        main()

請告訴我這是否有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM