[英]Tkinter Label Won't fit in the window after creating an executable with pyinstaller
I made an application with the pyinstaller, but on some machines that will use it, cutting out some labels from the window, in addition two textbox, see the image .我用 pyinstaller 做了一个应用程序,但在一些将使用它的机器上,从 window 中剪下一些标签,另外还有两个文本框,见图。 How can I solve this?我该如何解决这个问题? In my machine it fits, in another don't.在我的机器上它适合,在另一个不适合。 I think the problem is the place() method, but I don't know why it works in a computer and don't in another.我认为问题出在 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()
You can consider something like this, fixing the GUI size top.resizable(0, 0)
, and using relx
, rely
, relheight
and relwidth
with place()
, The values are relative to the parent widget, so if you have nested widgets (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).您可以考虑这样的事情,固定 GUI 大小top.resizable(0, 0)
,并使用relx
、 relheight
rely
relwidth
和place()
,这些值是相对于父小部件的,所以如果你有嵌套小部件 ( 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()
Just a suggestion, add a new parameter to .place()
called anchor
.只是一个建议,向.place()
添加一个名为anchor
的新参数。 Anchor determines what part of the widget goes to the coordinate specified. Anchor 确定小部件的哪个部分到达指定的坐标。 For example, if anchor = "center"
, and the coordinates specified with relx and rely are 0.5 and 0.5 relatively, then the middle of the widget will go to 0.5, 0.5.例如,如果anchor = "center"
,relx 和rely 指定的坐标相对为0.5 和0.5,那么widget 的中间将go 为0.5、0.5。
Sometimes the anchor is nw, or top left, and sometimes the widget goes to the side of the screen.有时锚是 nw 或左上角,有时小部件会移到屏幕的一侧。
So, set your anchor
to "center", and tell me what happens.所以,把你的anchor
设置为“中心”,然后告诉我会发生什么。
Hopefully this helps!希望这会有所帮助!
EDIT:编辑:
This would be your code:这将是您的代码:
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()
Please tell me if this works!!请告诉我这是否有效!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.