2010-02-07 2 views
0

Я использую Python 3.1, кстати.Python 3.1 Справка по макету Tkinter. Я близко, пожалуйста, помогите мне закончить это

Я пытаюсь создать простой графический интерфейс с использованием Tkinter-метки, текстового поля ввода, кнопки в первой строке и редактируемой текстовой области с полосой прокрутки вправо и внизу ее - во второй строке. Помогите мне исправить макет. То, что у меня ниже, не совсем работает. Если мне придется использовать сетку, я сделаю это. Я хочу сохранить код очень простым - я хочу «продать» Python некоторым из моих сотрудников. Итак, я хочу получить несколько приличный внешний вид. Предложите лучше заполнить, если вы не возражаете. Кроме того, если мои имена переменных и т. Д. Кажутся странными, пожалуйста, сделайте заметку.

В то же время я хочу притвориться, что это броский сценарий, на который я не потратил много времени. Поскольку я прошу о помощи, это не так, но они не должны знать;). Итак, я не хочу вводить модный код для создания красивых границ и т. Д. Я просто хочу что-то визуально привлекательное, чистое и простое. Если я этого не сделаю, то моя презентация не достигнет своей цели.

Спасибо, мой код ниже:

class App: 
    def __init__(self, parent): 
     frame = Frame(parent) 
     self.__setup_gui(frame) # Call Helper 
     frame.pack(padx=15, pady=15) 
     parent.title('To be changed') 

    def __setup_gui(self, frame): 

     # First Row 
     self.cs_label = Label(frame, text='Change Set: ') 
     self.cs_label.pack(side=LEFT, padx=10, pady=10) 

     self.cs_val = Entry(frame, width=10) 
     self.cs_val.pack(side=LEFT, padx=10, pady=10) 

     self.get_button = Button(frame, text='Get', command=self.get_content) 
     self.get_button.pack(side=LEFT, padx=10, pady=10) 

     # Text area and scrollbar 
     self.text_area = Text(frame, height=10, width=50, background='white') 
     # Put a scroll bar in the frame 
     scroll = Scrollbar(frame) 
     self.text_area.configure(yscrollcommand=scroll.set) 
     self.text_area.pack(side=TOP) 
     scroll.pack(side=RIGHT,fill=Y) 

     self.clipboard_var = IntVar() 
     self.notepad_var = IntVar() 

    def get_content(self): 
     print(self.clipboard_var.get()) 
     print(self.notepad_var.get()) 

################################################################################################### 

if __name__ == '__main__': 
    root = Tk() 
    app = App(root) 
    root.mainloop() 

ответ

2

Вы определенно хотите, чтобы менеджер сетки - пакет работает только для вертикальной или горизонтальной stackup сам по себе. Вы можете использовать несколько фреймов для работы вокруг него, но я считаю, что проще расширить графический интерфейс, если вы просто сделаете это с помощью Grid.

Вот что я на самом деле работал над тем, что вы сказали, и кодом. Я уменьшил/удалил прокладку - он выглядел огромным для меня - и я создал две полосы прокрутки в подрамнике, чтобы облегчить прокладку. Обратите внимание, что для создания горизонтальной полосы прокрутки ваша область текста должна иметь wrap = NONE; иначе вы можете использовать простой виджет «ScrolledText» из tkinter.scrolledtext и пропустить горизонтальную полосу прокрутки.

Я теперь немного переделал вещи, чтобы разрешить изменение размера, с минимальным размером, отображающим верхние кнопки - см. Использование minsize и row/columnconfigure.

Кстати, похоже, что ваши переменные никуда не тянутся - это намеренно?

from tkinter import * 

class App: 
    def __init__(self, parent): 
     self.__setup_gui(parent) # Call Helper 
     parent.title('To be changed') 

    def __setup_gui(self, parent): 

     # First Row 
     self.rowframe = Frame(parent) 
     self.rowframe.grid() 
     self.cs_label = Label(self.rowframe, text='Change Set: ') 
     self.cs_label.grid(row=0, column=0, padx=2, pady=2) 

     self.cs_val = Entry(self.rowframe, width=10) 
     self.cs_val.grid(row=0, column=1, padx=2, pady=2) 

     self.get_button = Button(self.rowframe, text='Get', command=self.get_content) 
     self.get_button.grid(row=0, column=2, padx=2, pady=2) 
     parent.update_idletasks() 
     parent.minsize(width=self.rowframe.winfo_width(), height=self.rowframe.winfo_height()) 

     # Text area and scrollbars 
     self.textframe = Frame(parent) 
     self.textframe.grid(row=1, columnspan=2, padx=2, pady=2, sticky=N+S+E+W) 

     self.hscroll = Scrollbar(self.textframe, orient=HORIZONTAL) 
     self.vscroll = Scrollbar(self.textframe) 
     self.text_area = Text(self.textframe, height=10, width=50, wrap=NONE, background='white', yscrollcommand=self.vscroll.set, xscrollcommand=self.hscroll.set) 
     self.text_area.grid(row=0, column=0, sticky=N+S+E+W) 
     self.hscroll.config(command=self.text_area.xview) 
     self.hscroll.grid(row=1, column=0, sticky=E+W) 
     self.vscroll.config(command=self.text_area.yview) 
     self.vscroll.grid(row=0, column=1, sticky=N+S) 

     # Row 0 defaults to 0 
     parent.rowconfigure(1, weight=1) 
     parent.columnconfigure(1, weight=1) 

     # Textarea setup 
     self.textframe.rowconfigure(0, weight=1) 
     self.textframe.columnconfigure(0, weight=1) 


     self.clipboard_var = IntVar() 
     self.notepad_var = IntVar() 

    def get_content(self): 
     print(self.clipboard_var.get()) 
     print(self.notepad_var.get()) 

################################################################################################### 

if __name__ == '__main__': 
    root = Tk() 
    app = App(root) 
    root.mainloop() 

Теперь все, что сказал ... вы можете получить больше визуальной привлекательности с PyGTK, PyQt или WxPython, хотя Tkinter идет «стандарт» приятная особенность.

+0

Очень круто! Теперь, как я могу получить полосу прокрутки внизу? –

+0

Я прошел и изменил код для горизонтальной полосы прокрутки; Мне пришлось вернуться к использованию Text, а не ScrolledText для оптимального внешнего вида, и чтобы сделать его полезным, мне пришлось установить wrap на NONE. Вы можете найти информацию в http://www.effbot.org/zone/tkinter-scrollbar-patterns.htm, полезную для другого прокрутки прокрутки. –

+0

Ваше решение имеет плохое изменение размера. Вы должны включать вызовы для конфигурации столбцов и rowconfigure, давая соответствующие значения веса для строк и столбцов (столбцов), которые вы хотите выращивать и сжимать. –