我做了一个应用程序与pyinstaller,但在一些机器上,将使用它,从窗口切割出一些标签,另外两个文本框。见图. 我如何解决这个问题?在我的机器上,它适合,在另一个不.我认为问题是地方()的方法,但我不知道为什么它在一台电脑上工作,而不是在另一个。
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()
只是一个建议,添加一个新的参数 .place()
叫做 anchor
. 锚点决定小组件的哪一部分到指定的坐标。例如,如果 anchor = "center"
,而且用relx和relix指定的坐标相对是0.5和0.5,那么widget的中间就会走到0.5,0.5。
有时候,锚是nw,或者左上角,有时候,widget会走到屏幕的侧面。
所以,设置你的 anchor
到 "中心",然后告诉我发生了什么。
希望这能帮助你
EDIT:
这将是你的代码。
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()
请告诉我这是否有效!
你可以考虑像这样,固定GUI的大小。top.resizable(0, 0)
,并使用 relx
, rely
, relheight
和 relwidth
与 place()
这些值是相对于父部件而言的,所以如果你有嵌套的部件(即一个文本框在标签框内,那么标签框的值是相对于顶部窗口的,而文本框的值是相对于标签框的)。
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()