Как я мог получить Кадр с полосой прокрутки в Tkinter?

При загрузке большого файла я довольно часто делаю:

while ls -la <filename>; do sleep 5; done

И затем просто ctrl+c, когда я сделан (или если ls ненулевые возвраты). Это подобно watch программа, но это использует оболочку вместо этого, таким образом, это работает над платформами без watch.

Другой полезный инструмент является netcat, или nc. Если Вы делаете:

nc -l -p 9100 > printjob.prn

Тогда можно настроить принтер на другом компьютере, но вместо этого использовать IP-адрес компьютера, работающего netcat. Когда задание печати отправляется, оно получено компьютером, работающим netcat, и выведено в printjob.prn.

8
задан nbro 21 March 2015 в 04:20
поделиться

2 ответа

Если вы можете использовать Tix, есть виджет ScrolledWindow, который имеет окно , фрейм и один или два виджета полосы прокрутки:

import Tix as tk

r= tk.Tk()
r.title("test scrolled window")
sw= tk.ScrolledWindow(r, scrollbar=tk.Y) # just the vertical scrollbar
sw.pack(fill=tk.BOTH, expand=1)
for i in xrange(10):
    e= tk.Entry(sw.window)
    e.pack()
r.mainloop()

Измените размер корневого окна. Вам нужно будет добавить код к событию focus_get виджетов Entry для прокрутки ScrolledWindow при переходе с клавиатуры.

В противном случае вам придется использовать виджет Canvas (вы можете добавить подвиджеты Label, Entry и Text) и написать гораздо больше кода самостоятельно для реализации необходимых функций.

8
ответ дан 5 December 2019 в 11:25
поделиться

Ниже приведен пример автоматического скрытия полос прокрутки , который работает, только если вы просто используете диспетчер геометрии сетки , взятый из effbot.org документация:

from tkinter import *


class AutoScrollbar(Scrollbar):
    # A scrollbar that hides itself if it's not needed.
    # Only works if you use the grid geometry manager!
    def set(self, lo, hi):
        if float(lo) <= 0.0 and float(hi) >= 1.0:
            # grid_remove is currently missing from Tkinter!
            self.tk.call("grid", "remove", self)
        else:
            self.grid()
        Scrollbar.set(self, lo, hi)
    def pack(self, **kw):
        raise TclError("cannot use pack with this widget")
    def place(self, **kw):
        raise TclError("cannot use place with this widget")


# create scrolled canvas

root = Tk()

vscrollbar = AutoScrollbar(root)
vscrollbar.grid(row=0, column=1, sticky=N+S)
hscrollbar = AutoScrollbar(root, orient=HORIZONTAL)
hscrollbar.grid(row=1, column=0, sticky=E+W)

canvas = Canvas(root, yscrollcommand=vscrollbar.set, xscrollcommand=hscrollbar.set)
canvas.grid(row=0, column=0, sticky=N+S+E+W)

vscrollbar.config(command=canvas.yview)
hscrollbar.config(command=canvas.xview)

# make the canvas expandable
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

# create canvas contents
frame = Frame(canvas)
frame.rowconfigure(1, weight=1)
frame.columnconfigure(1, weight=1)

rows = 5
for i in range(1, rows):
    for j in range(1, 10):
        button = Button(frame, text="%d, %d" % (i,j))
        button.grid(row=i, column=j, sticky='news')

canvas.create_window(0, 0, anchor=NW, window=frame)
frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox("all"))

root.mainloop()
7
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: