thu gọn tế bào trong máy tính xách tay jupyter


143

Tôi đang sử dụng máy tính xách tay ipython Jupyter. Giả sử tôi đã xác định một chức năng chiếm nhiều không gian trên màn hình của mình. Có cách nào để đánh sập tế bào?

Tôi muốn chức năng vẫn được thực thi và có thể gọi được, nhưng tôi muốn ẩn / thu gọn ô để hiển thị tốt hơn sổ ghi chép. Tôi có thể làm cái này như thế nào?


30
Ồ, đã là năm 2017 và không có giải pháp đơn giản nào
user1700890

31
2019 và vẫn còn tiếp tục
Hardian Lawi 22/03/19

22
2020 ... (lần đầu tiên!)
vào

5
À, tôi sẽ nhắc nhở để tôi có thể là người đầu tiên vào năm 2021
newbie

6
JupyterLab có cái này từ năm 2019. Đánh dấu một ô và sau đó nhấp vào thanh màu xanh bên cạnh nó. Bây giờ bạn sẽ thấy nó được biểu thị như ba dấu chấm. Nó sẽ được tôn trọng khi bạn lưu và mở lại sau hoặc ở nơi khác. Có thêm các tính năng và tùy chọn, chẳng hạn như View> Collapse All Code, xem tại đâyliên kết ở đây .
Wayne

Câu trả lời:


94

Các jupyter contrib nbextensionsgói Python chứa một phần mở rộng mã gấp có thể được kích hoạt trong máy tính xách tay. Theo liên kết (Github) để biết tài liệu.

Để cài đặt bằng dòng lệnh:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

Để làm cho cuộc sống dễ dàng hơn trong việc quản lý chúng, tôi cũng khuyên bạn nên jupyter nbextensions configuratorgói. Điều này cung cấp một tab bổ sung trong giao diện Notebook của bạn từ đó bạn có thể dễ dàng (hủy) kích hoạt tất cả các tiện ích mở rộng đã cài đặt.

Cài đặt:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

11
Công cụ tuyệt vời, mặc dù tôi muốn nbextension "Codefold" sẽ gấp toàn bộ các ô, và không chỉ các khối mã.
bsmith89

2
Nếu bất cứ ai gặp vấn đề cài đặt với conda hãy thử: pip install jupyter_contrib_nbextensionssau đó jupyter contrib nbextensions install --sys-prefix --skip-running-check. Tôi muốn jupyter sẽ có gói này theo mặc định.
dùng1700890

7
Đường dẫn cài đặt đơn giản nhất là thông qua chính conda : conda install -c conda-forge jupyter_contrib_nbextensions.
Max Ghenis

3
Chỉ cần một lưu ý nhanh cho bất cứ ai sử dụng JupyterLab mới hơn. Theo trang GitHub đã đề cập, các tiện ích mở rộng này hoạt động trong JupyterLab. Tôi đã tự hỏi điều này vì vậy tôi nghĩ rằng tôi sẽ cho người khác biết. Trích dẫn repo GitHub : Due to major differences between the Jupyter Notebook and JupyterLab, the extensions in this repository will not work in JupyterLab.
NYCeyes

2
Bạn CÓ THỂ thu gọn toàn bộ một ô nếu bạn đặt #comment ở đầu ô. Jupyter sau đó cung cấp một mũi tên thả xuống sẽ thu gọn toàn bộ tế bào.
EatSaddCode

27

Bạn có thể tạo một ô và đặt đoạn mã sau vào đó:

%%html
<style>
div.input {
    display:none;
}
</style>

Chạy ô này sẽ ẩn tất cả các ô nhập. Để hiển thị lại, bạn có thể sử dụng menu để xóa tất cả các đầu ra.

Nếu không, bạn có thể thử các tiện ích mở rộng như dưới đây:

https://github.com/ipython-contrib/IPython-notebook-extensions/wiki/Home_3x


Các phần mở rộng máy tính xách tay là thực sự tốt. Có một loạt những thứ khác nữa. github.com/ipython-contrib/jupyter_contrib_nbextensions
shahensha

27

JupyterLab hỗ trợ thu gọn tế bào. Nhấp vào thanh ô màu xanh bên trái sẽ gấp ô. nhập mô tả hình ảnh ở đây


6
không kiên trì xuất khẩu mặc dù
cosmosa

Có một giải pháp tốt cho việc này? Tôi rất muốn che giấu các tế bào bị sụp đổ khi tôi xuất. Tôi muốn giữ một số mã và một số đầu ra, và ẩn một số mã và đầu ra khác, vì vậy tôi không thể ẩn tất cả mã .....
Russell Richie

2
Mã và đầu ra có thể được thu gọn như mô tả trong câu trả lời này. Hơn nữa, thông tin vẫn tồn tại. Nó được viết trong siêu dữ liệu của tế bào. source_hiddenoutputs_hiddenđược thiết lập. nbformat.readthedocs.io/en/latest/ Từ
gillesB

16

Tôi đã có một vấn đề tương tự và "nbextensions" được chỉ ra bởi @Energya hoạt động rất tốt và dễ dàng. Các hướng dẫn cài đặt rất đơn giản (tôi đã thử với anaconda trên Windows) cho các phần mở rộng máy tính xách taycho cấu hình của chúng .

Điều đó nói rằng, tôi muốn thêm rằng các phần mở rộng sau đây nên được quan tâm.

  • Ẩn đầu vào | Phần mở rộng này cho phép ẩn một codecell riêng lẻ trong một notebook. Điều này có thể đạt được bằng cách nhấp vào nút thanh công cụ: Ẩn đầu vào

  • Tiêu đề có thể thu gọn | Cho phép máy tính xách tay có các phần có thể thu gọn, được phân tách bằng các tiêu đề Tiêu đề có thể thu gọn

  • Tiền mã hóa | Điều này đã được đề cập nhưng tôi thêm nó cho đầy đủ Tiền mã hóa


9

Tạo tệp custom.js bên trong ~ / .jupyter / custom / với các nội dung sau:

$("<style type='text/css'> .cell.code_cell.collapse { max-height:30px; overflow:hidden;} </style>").appendTo("head");
$('.prompt.input_prompt').on('click', function(event) {
    console.log("CLICKED", arguments)   
    var c = $(event.target.closest('.cell.code_cell'))
    if(c.hasClass('collapse')) {
        c.removeClass('collapse');
    } else {
        c.addClass('collapse');
    }
});

Sau khi lưu, khởi động lại máy chủ và làm mới máy tính xách tay. Bạn có thể thu gọn bất kỳ ô nào bằng cách nhấp vào nhãn đầu vào (Trong []).


3
Điều này không làm việc cho tôi vì div được thay đổi không được tải, khi js tùy chỉnh được thực thi. Tuy nhiên, điều này có thể được cố định gói mọi thứ trong setTimeout (function () {...}, 3000);
Steohan

2
Điều này hiệu quả với tôi sau khi thay đổi dòng thứ 4 thành: var c = $(event.target).closest('.cell.code_cell') và làm theo đề xuất của Steohan để bọc mọi thứ trong setTimeout.
proteome

Bạn chỉ có thể sử dụng c.toggleClass ('sụp đổ'); thay vì câu lệnh if-other.
gouravkr

9

Tiện ích ẩn_code cho phép bạn ẩn các ô riêng lẻ và / hoặc các lời nhắc bên cạnh chúng. Cài đặt như

pip3 install hide_code

Truy cập https://github.com/kirbs-/ leather_code / để biết thêm thông tin về tiện ích mở rộng này.


9

Đầu tiên, hãy làm theo hướng dẫn của Energya:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

Thứ hai là chìa khóa: Sau khi mở sổ ghi chép jupiter, nhấp vào tab Nbextension. Bây giờ Tìm kiếm "colla" từ công cụ tìm kiếm được cung cấp bởi Nbextension (không phải bởi trình duyệt web) , sau đó bạn sẽ tìm thấy một cái gì đó gọi là "Tiêu đề có thể thu gọn"

Đây là cái bạn muốn!


2

Như những người khác đã đề cập, bạn có thể làm điều này thông qua nbextensions. Tôi muốn đưa ra lời giải thích ngắn gọn về những gì tôi đã làm, nhanh chóng và dễ dàng:

Để bật các tiêu đề có thể cộng tác: Trong thiết bị đầu cuối của bạn, hãy bật / cài đặt Tiện ích mở rộng Jupyter Notebook bằng cách nhập trước:

pip install jupyter_contrib_nbextensions

Sau đó, nhập:

jupyter contrib nbextension install

Mở lại Jupyter Notebook. Chuyển đến tab "Chỉnh sửa" và chọn "nbextensions config". Bỏ chọn hộp trực tiếp dưới tiêu đề "nbextensions có thể định cấu hình", sau đó chọn "tiêu đề có thể thu gọn".


Tự hỏi tại sao người ta không thể truy cập nbextensions configtrực tiếp từ bảng điều khiển chính và phải mở một cuốn sổ tay thay thế. Ngoài ra, như những người khác đã đề cập, người ta có thể truy cập nó qua localhost:8888/nbextensions(hoặc bất kỳ cổng nào trong cấu hình của bạn)
Antoine

2

Có rất nhiều câu trả lời cho câu hỏi này, tất cả những điều tôi cảm thấy không thỏa đáng (nhiều hơn những phần khác), trong số nhiều phần mở rộng - gấp mã, gấp theo tiêu đề, v.v. Không ai làm những gì tôi muốn một cách đơn giản và hiệu quả. Tôi thực sự ngạc nhiên rằng một giải pháp đã không được thực hiện (như nó đã có cho Jupyter Lab).

Trong thực tế, tôi rất không hài lòng vì tôi đã phát triển một phần mở rộng máy tính xách tay rất đơn giản có thể mở rộng / thu gọn trong một ô của máy tính xách tay, trong khi vẫn giữ cho nó có thể thực thi được.

Kho lưu trữ GitHub: https://github.com/BenedictWilkinsAI/cellfolding

Dưới đây là một bản demo nhỏ về những gì phần mở rộng làm:

Chỉ cần nhấp đúp chuột trái vào ô mã sẽ thu gọn nó thành một dòng duy nhất:

Nhấp đúp lần nữa sẽ mở rộng ô.

Phần mở rộng có thể được cài đặt dễ dàng với pip:

pip install nbextension-cellfolding
jupyter nbextension install --py cellfolding --user
jupyter nbextension enable --py cellfolding --user 

và cũng tương thích với cấu hình nbextension . Tôi hy vọng rằng mọi người sẽ tìm thấy điều này hữu ích!


2
Làm việc như người ở. Neat
Ayan Mitra

1

Ngoài ra còn có một phiên bản cải tiến của đề xuất Pan Yan. Nó thêm nút hiển thị các ô mã trở lại:

%%html
<style id=hide>div.input{display:none;}</style>
<button type="button" 
onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">
Show inputs</button>

Hoặc trăn:

# Run me to hide code cells

from IPython.core.display import display, HTML
display(HTML(r"""<style id=hide>div.input{display:none;}</style><button type="button"onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">Show inputs</button>"""))

2
Các mã ẩn TẤT CẢ ô nhập, không phải một ô cụ thể.
Jack Fleeting

Chỉ là những gì tôi muốn cho đầu ra, nhưng bạn có thể thu gọn / ẩn tất cả đầu ra bằng cách chuyển nó trong menu Jupyter: Cell> All Output> Toggle
markling 14/03/19

Thật xấu hổ, đây là giải pháp duy nhất tôi tìm thấy để ẩn mã theo mặc định và chỉ hiển thị nó khi nhấp chuột. Thật không may, điều này ẩn tất cả các ô và không chỉ một mục tiêu.
Penelope

@penelope bạn có thể kiểm tra xem các ô khác nhau có ID phần tử html khác nhau hoặc các lớp duy nhất. Nếu có thì bạn có thể sửa đổi câu trả lời của tôi cho phù hợp. Câu trả lời của tôi ảnh hưởng đến tất cả các ô vì nó không phân biệt giữa các ô.
Peter Zagubisalo

1

Bạn không cần phải làm gì nhiều ngoài việc kích hoạt các tiện ích mở rộng:

http://localhost:8888/nbextensions?nbextension=collapsible_headings
http://localhost:8888/nbextensions?nbextension=codefolding/main

nhập mô tả hình ảnh ở đây

Nhiều khả năng bạn sẽ tìm thấy tất cả các tiện ích mở rộng của mình tại đây:

http://localhost:8888/nbextensions

nhập mô tả hình ảnh ở đây


1

Những gì tôi sử dụng để có được kết quả mong muốn là:

  1. Lưu khối mã bên dưới trong một tệp có tên toggle_cell.pytrong cùng thư mục với sổ ghi chép của bạn
from IPython.core.display import display, HTML
toggle_code_str = '''
<form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Show Sloution"></form>
'''

toggle_code_prepare_str = '''
    <script>
    function code_toggle() {
        if ($('div.cell.code_cell.rendered.selected div.input').css('display')!='none'){
            $('div.cell.code_cell.rendered.selected div.input').hide();
        } else {
            $('div.cell.code_cell.rendered.selected div.input').show();
        }
    }
    </script>

'''

display(HTML(toggle_code_prepare_str + toggle_code_str))

def hide_sloution():
    display(HTML(toggle_code_str))
  1. Thêm phần sau vào ô đầu tiên của sổ ghi chép của bạn
from toggle_cell import toggle_code as hide_sloution
  1. Bất kỳ ô nào bạn cần thêm nút chuyển đổi để gọi đơn giản hide_sloution()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.