2

多数の組み合わせを見つけるために itertools.combinations モジュールを使用しています。私のプログラムはすべての組み合わせ (それらの多く) を見つけますが、すべての組み合わせの合計が何らかの数値になるかどうかをチェックし、その組み合わせをリストに保存します。

from itertools import *
from math import *
import Tkinter as tk
import ttk


x = int(raw_input('Enter number of combinations: '))
z = int(raw_input('Enter sum number: '))


def combinator():
    comb = combinations(range(100), x)
    for i in comb:
        yield i

my_combinations = []
combination_s = combinator()
for i in combination_s:
    print i
    c = list(i)
    if fsum(c)==z:
        my_combinations.append(c)

print my_combinations

root = tk.Tk()
root.title('ttk.Progressbar')
pbar = ttk.Progressbar(root, length=300, mode='determinate', maximum = 100)
pbar.pack(padx=5, pady=5)
root.mainloop()

プログラムが組み合わせの合計を評価するたびに進行状況を示す ttk.progressbar が必要です。どうやってやるの?

4

1 に答える 1

1

すべての組み合わせの進行状況バーを増やす例を次に示します。短時間待機するだけですが、ProgBarApp.start代わりにfor ループでいくつかの計算を行うように簡単に変更できます。time.sleep

from Tkinter import *
from itertools import combinations
import ttk
import time

class ProgBarApp:
    def __init__(self):
        self.vals = range(1, 20)
        self.combs = list(combinations(self.vals,3))
        self.n = len(self.combs)
        self.progressbar = ttk.Progressbar(root, maximum = self.n+1)
        self.progressbar.pack()

    def start(self):
        for c in self.combs:
            self.progressbar.step()
            time.sleep(0.01)    
            root.update()
        root.destroy()

root = Tk()
p = ProgBarApp()
root.after(0, p.start())
root.mainloop()
于 2012-12-13T08:36:20.127 に答える